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
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)) {
// 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;
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}}
}