]> granicus.if.org Git - clang/commitdiff
Re-teach Expr::isNullPointerConstant() about ImplicitCastExpr:-)
authorSteve Naroff <snaroff@apple.com>
Wed, 29 Aug 2007 00:00:02 +0000 (00:00 +0000)
committerSteve Naroff <snaroff@apple.com>
Wed, 29 Aug 2007 00:00:02 +0000 (00:00 +0000)
This fixes the following bug submitted by Neil...

const char *f (void) { return 0; }

...which would incorrectly warn with -pedantic enabled.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41559 91177308-0d34-0410-b5e6-96231b3b80d8

AST/Expr.cpp

index 69ea9442ffad1c0dec10f897daee846fdcaa6186..0b284a8a3fc3199be2b1e0ab3dfd4f2e73930a6c 100644 (file)
@@ -648,13 +648,8 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const {
         return CE->getSubExpr()->isNullPointerConstant(Ctx);
     }
   } else if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(this)) {
-    // Check that it is a cast to void*.
-    if (const PointerType *PT = dyn_cast<PointerType>(ICE->getType())) {
-      QualType Pointee = PT->getPointeeType();
-      if (Pointee.getQualifiers() == 0 && Pointee->isVoidType() && // to void*
-          ICE->getSubExpr()->getType()->isIntegerType())           // from int.
-        return ICE->getSubExpr()->isNullPointerConstant(Ctx);
-    }
+    // Ignore the ImplicitCastExpr type entirely.
+    return ICE->getSubExpr()->isNullPointerConstant(Ctx);
   } else if (const ParenExpr *PE = dyn_cast<ParenExpr>(this)) {
     // Accept ((void*)0) as a null pointer constant, as many other
     // implementations do.