[cfe-commits] r45951 - in /cfe/trunk: AST/Expr.cpp test/Sema/conditional-expr.c
Steve Naroff
snaroff at apple.com
Mon Jan 14 08:12:43 PST 2008
On Jan 13, 2008, at 10:04 PM, Chris Lattner wrote:
> On Jan 13, 2008, at 6:53 PM, Steve Naroff wrote:
>> URL: http://llvm.org/viewvc/llvm-project?rev=45951&view=rev
>> Log:
>>
>> Rewrite Expr::isNullPointerConstant() to deal with multiple levels
>> of explicit casts.
>>
>> Now, isNullPointerConstant() will return true for the following:
>> "(void*)(double*)0"
>
> Unfortunately, this violates the C spec. :(
>
I just reverted this patch.
If it violates the C spec and doesn't solve Bjorn & Seo's problems,
then we need another solution.
snaroff
> How about only accepting this with -pedantic?
>
> Some specific things about the patch:
>
>> +/// Helper function for isNullPointerConstant. This routine skips
>> all
>> +/// explicit casts, implicit casts and paren expressions.
>> +const Expr * getNullPointerConstantExpr(const Expr *exp) {
>
> Ok, you could make it iterative, but not a big deal. Please rename
> this to "LookThroughCasts" or something like that, as the function
> has nothing to do with null (the name should reflect what it does,
> not who the client is). Should it only look through casts to
> pointer type? We don't want to accept something like (void*)(int)
> (float)0 as a null pointer constant.
>
>> /// isNullPointerConstant - C99 6.3.2.3p3 - Return true if this is
>> either an
>> /// integer constant expression with the value zero, or if this is
>> one that is
>> /// cast to void*.
>> bool Expr::isNullPointerConstant(ASTContext &Ctx) const {
>> + const CastExpr *CE = dyn_cast<CastExpr>(this);
>> + const Expr *e = getNullPointerConstantExpr(this);
>
> This implementation is overly complex. I'd eliminate "CE" entirely,
> and change the code to be:
>
> const Expr *e = getNullPointerConstantExpr(this);
> if (!e->isinteger) return false;
>
> return true see if it's an integer constant expr with value 0.
>
> Isn't that sufficient?
>
> -Chris
More information about the cfe-commits
mailing list