The C standard is quite clear on this, your RecFoo2 example is not a valid C program:
6.3.2.2 void
The (nonexistent) value of a void expression (an expression that has type void) shall not be used in any way, ...
and
6.8.6.4 The return statement
Constraints
A return statement with an expression shall not appear in a function whose return type is void.