[cfe-dev] C90 conformance: return statements without expressions in non-void functions

Douglas Gregor dgregor at apple.com
Tue Sep 14 08:39:59 PDT 2010


On Sep 14, 2010, at 7:54 AM, Ken Dyck wrote:

> I have been using the Plum Hall Validation Suite for C [1] to validate a
> Clang/LLVM backend that I'm working on. 
> 
> In the conformance-testing code of the suite is defined the following
> function:
> [snip]
> The C99 macro is defined when testing against the C99 standard and is
> undefined for C90.
> 
> This code fails to compile with Clang in the C90 case:
> 
>> clang -S -x c -std=iso9899:1990 -o - test2.c
>  test2.c:19:5: error: non-void function 'yfunc' should return a value
>        [-Wreturn-type]
>      return;
>      ^
>  1 error generated.
> 
> Section 6.6.4 of C90 reads, "If a return statement without an expression
> is executed, and the value of the function call is used by the caller,
> the behavior is undefined." The standard says nothing (at least that
> I've found) about the case where the value of the function is _not_
> used, which happens to be the case for yfunc() in the context of the
> validation suite.
> 
> Can any language lawyers comment on whether yfunc() should compile in
> C90 mode?


I don't know the C90 standard well, but from the statement you quote it seems that Clang is non-conformant.

That said, from a user's perspective, Clang is doing the right thing: writing a "return" statement with no expression, in a function that has a non-void return type, is asking for trouble, and we're doing users a favor by rejecting it outright. Plum Hall isn't helping anyone by checking this.

	- Doug



More information about the cfe-dev mailing list