[cfe-commits] r114495 - in /cfe/trunk: lib/CodeGen/CGExprScalar.cpp test/CodeGen/vla.c

Fariborz Jahanian fjahanian at apple.com
Wed Sep 22 08:19:14 PDT 2010


On Sep 21, 2010, at 6:44 PM, Eli Friedman wrote:

> On Tue, Sep 21, 2010 at 3:53 PM, Fariborz Jahanian <fjahanian at apple.com 
> > wrote:
>> Author: fjahanian
>> Date: Tue Sep 21 17:53:33 2010
>> New Revision: 114495
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=114495&view=rev
>> Log:
>> Fixes an IRgen ICE due to cast of null pointer to
>> a vla type (fixes pr7827).
>>
>> Modified:
>>    cfe/trunk/lib/CodeGen/CGExprScalar.cpp
>>    cfe/trunk/test/CodeGen/vla.c
>>
>> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=114495&r1=114494&r2=114495&view=diff
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Sep 21 17:53:33 2010
>> @@ -209,8 +209,17 @@
>>   }
>>   Value *VisitCastExpr(CastExpr *E) {
>>     // Make sure to evaluate VLA bounds now so that we have them  
>> for later.
>> -    if (E->getType()->isVariablyModifiedType())
>> -      CGF.EmitVLASize(E->getType());
>> +    if (E->getType()->isVariablyModifiedType()) {
>> +      // Implicit cast of a null pointer to a vla type need not  
>> result in vla
>> +      // size computation which is not always possible in any case  
>> (see pr7827).
>> +      bool NeedSize = true;
>> +      if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr> 
>> (E))
>> +        NeedSize =
>> +          !ICE->getSubExpr()->isNullPointerConstant(CGF.getContext 
>> (),
>> +                                                 
>> Expr::NPC_ValueDependentIsNull);
>> +      if (NeedSize)
>> +        CGF.EmitVLASize(E->getType());
>> +    }
>>
>>     return EmitCastExpr(E);
>>   }
>
>
> Why exactly does it matter if the subexpression is a null pointer  
> constant?

Null pointers get special treatment in Sema and I addressed it in  
IRGen. But
pr has been updated with a more interesting test case and I will look  
at it
today.

- Fariborz

>
> -Eli




More information about the cfe-commits mailing list