[cfe-dev] Unexpected warning in -std=gnu89 -pedantic mode.

Enea Zaffanella zaffanella at cs.unipr.it
Wed Aug 26 08:37:27 PDT 2009


Douglas Gregor wrote:
> 
> On Aug 26, 2009, at 5:12 AM, Enea Zaffanella wrote:
>> There seems to be a problem in the handling of diagnostic for GNU
>> extensions: some warnings are produced even though the -std=gnu89 option
>> is specified.
> 
> We probably have quite a few of these problems, because many of these 
> extension diagnostics were written before we distinguished between the 
> different kinds of extensions (e.g., Microsoft vs. GNU), so they 
> conflate "is an extension diagnostic" with "is a GNU extension.
> 
>> $ cat aaa.c
>> int foo() {
>>   return ({2+3;});
>> }
>>
>> $ clang-cc -std=gnu89 -pedantic aaa.c
>> aaa.c:2:11: warning: use of GNU statement expression extension
>>   return ({2+3;});
>>           ^
>> 1 diagnostic generated.
>> $
> 
> The fix for this issue would be to change 1311 of ParseExpr.cpp from
> 
>     Diag(Tok, diag::ext_gnu_statement_expr);
> 
> to
> 
>   if (!getLang().GNUMode)
>     Diag(Tok, diag::ext_gnu_statement_expr);
> 
>> The same happens when using, e.g., __builtin_offsetof.
> 
> It'll happen in many places, all of which will need to be changed with a 
> check for GNUMode (for GNU extensions). I'd be happy to review and apply 
> such a patch, if someone feels like tackling this.
> 
>     - Doug

OK, I think we will make a pass on these,
trying to be as systematic as possible.

Cheers,
Enea Zaffanella.



More information about the cfe-dev mailing list