From 40710893357b13e7ff1be58d0773cb00cf7f194d Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Tue, 11 Feb 2014 17:53:22 +0000 Subject: [PATCH] [Sema] Revert the change in r200622 that allowed integer casts to silence -Wnon-literal-null-conversion in C code. It is actually useful to warn in such cases, thanks to Dmitri for pushing on this and making us see the light! Related to rdar://15925483 and rdar://15922612. The latter radar is where the usefulness of the warning is most clear. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@201165 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/Expr.cpp | 3 --- test/Sema/warn-null.c | 4 ++-- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index 649f3580bd..3f5833c501 100644 --- a/lib/AST/Expr.cpp +++ b/lib/AST/Expr.cpp @@ -3061,9 +3061,6 @@ Expr::isNullPointerConstant(ASTContext &Ctx, Pointee->isVoidType() && // to void* CE->getSubExpr()->getType()->isIntegerType()) // from int. return CE->getSubExpr()->isNullPointerConstant(Ctx, NPC); - // Or an integer cast. - } else if (CE->getType()->isIntegerType()) { - return CE->getSubExpr()->isNullPointerConstant(Ctx, NPC); } } } else if (const ImplicitCastExpr *ICE = dyn_cast(this)) { diff --git a/test/Sema/warn-null.c b/test/Sema/warn-null.c index 28ec631415..3bf2aedc44 100644 --- a/test/Sema/warn-null.c +++ b/test/Sema/warn-null.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 %s -verify -#define NLL (unsigned long long)0 +#define SOME_ADDR (unsigned long long)0 // PR10837: Warn if a non-pointer-typed expression is folded to a null pointer int *p = 0; @@ -10,5 +10,5 @@ void f() { p = 0; q = '\0'; // expected-warning{{expression which evaluates to zero treated as a null pointer constant}} r = 1 - 1; // expected-warning{{expression which evaluates to zero treated as a null pointer constant}} - p = NLL; + p = SOME_ADDR; // expected-warning{{expression which evaluates to zero treated as a null pointer constant}} } -- 2.49.0