From: Eli Friedman Date: Sat, 25 Apr 2009 22:37:12 +0000 (+0000) Subject: Change isNullPointerConstant to be strict; hopefully this won't cause X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=09de1767990d4828bcaf0dd22033a5dddeecbe08;p=clang Change isNullPointerConstant to be strict; hopefully this won't cause any issues now that we have our own tgmath.h. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70090 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 970d295192..f9ca323a47 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -1374,12 +1374,8 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const // If we have an integer constant expression, we need to *evaluate* it and // test for the value 0. - // FIXME: We should probably return false if we're compiling in strict mode - // and Diag is not null (this indicates that the value was foldable but not - // an ICE. - EvalResult Result; - return Evaluate(Result, Ctx) && !Result.HasSideEffects && - Result.Val.isInt() && Result.Val.getInt() == 0; + llvm::APSInt Result; + return isIntegerConstantExpr(Result, Ctx) && Result == 0; } /// isBitField - Return true if this expression is a bit-field. diff --git a/test/Sema/i-c-e.c b/test/Sema/i-c-e.c index 6bc3541399..6afe035e1c 100644 --- a/test/Sema/i-c-e.c +++ b/test/Sema/i-c-e.c @@ -3,7 +3,7 @@ #include #include -int a() {int p; *(1 ? &p : (void*)(0 && (a(),1))) = 10;} +int a() {int p; *(1 ? &p : (void*)(0 && (a(),1))) = 10;} // expected-error {{incomplete type 'void' is not assignable}} // rdar://6091492 - ?: with __builtin_constant_p as the operand is an i-c-e. int expr;