[cfe-commits] r51907 - in /cfe/trunk: lib/AST/Expr.cpp test/Sema/gcc-cast-ext.m

Steve Naroff snaroff at apple.com
Tue Jun 3 10:54:37 PDT 2008


On Jun 3, 2008, at 10:43 AM, Eli Friedman wrote:

> On Tue, Jun 3, 2008 at 10:15 AM, Steve Naroff <snaroff at apple.com>  
> wrote:
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
>> --- cfe/trunk/lib/AST/Expr.cpp (original)
>> +++ cfe/trunk/lib/AST/Expr.cpp Tue Jun  3 12:15:29 2008
>> @@ -918,6 +918,11 @@
>>    if (!SubExpr->getType()->isArithmeticType() ||
>>        !getType()->isIntegerType()) {
>>      if (Loc) *Loc = SubExpr->getLocStart();
>> +      // GCC accepts pointers as an extension.
>> +      // FIXME: check getLangOptions().NoExtensions. At the  
>> moment, it doesn't
>> +      // appear possible to get langOptions() from the Expr.
>> +      if (SubExpr->getType()->isPointerType()) // && !NoExtensions
>> +        return true;
>>      return false;
>>    }
>
> This is no good: this potentially breaks standards-compliant code (as
> I said in reply to the mail you sent to cfe-dev), and it's completely
> impossible to warn for illegal cases.

If Expr had access to langOptions(), why is this impossible to warn  
about?

> If you really need this
> specific construct to work, we can add a special-case to the struct
> decl code to allow it.
>
> Also, your implementation is completely broken; it treats *all*
> pointers as integer constant expressions, and it doesn't actually
> bother to compute the correct value.  This will silently break code
> that uses this construct; if I'm not mistaken, sizeof(struct xx) in
> the testcase you added is zero.
>

At the moment, it's more important for this to "work" on GCC dependent  
code that we are trying to compile (rather than worry too much about  
hypothetical cases).

If this change negatively effects *any* current code being worked on,  
I am happy to back it out...

Pragmatically yours,

snaroff

> -Eli




More information about the cfe-commits mailing list