forked from OSchip/llvm-project
[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. llvm-svn: 201165
This commit is contained in:
parent
f075824998
commit
77ed8972fa
|
@ -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<ImplicitCastExpr>(this)) {
|
||||
|
|
|
@ -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}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue