From: Steve Naroff Date: Wed, 29 Aug 2007 00:00:02 +0000 (+0000) Subject: Re-teach Expr::isNullPointerConstant() about ImplicitCastExpr:-) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=19a6ebd216041c6f466ea18a8b1bbdd9e7ea1649;p=clang Re-teach Expr::isNullPointerConstant() about ImplicitCastExpr:-) 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 --- diff --git a/AST/Expr.cpp b/AST/Expr.cpp index 69ea9442ff..0b284a8a3f 100644 --- a/AST/Expr.cpp +++ b/AST/Expr.cpp @@ -648,13 +648,8 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const { return CE->getSubExpr()->isNullPointerConstant(Ctx); } } else if (const ImplicitCastExpr *ICE = dyn_cast(this)) { - // Check that it is a cast to void*. - if (const PointerType *PT = dyn_cast(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(this)) { // Accept ((void*)0) as a null pointer constant, as many other // implementations do.