From 28a5f0cdfcc927a94c1bda6a225200762df22411 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Thu, 21 Jun 2012 18:51:10 +0000 Subject: [PATCH] PR13165: False positive when initializing member data pointers with NULL. This now correctly covers, I believe, all the pointer types: * 'any' pointers (both function and data normal pointers and ObjC object pointers) * member pointers (both function and data) * block pointers git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@158931 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaChecking.cpp | 3 +-- test/SemaCXX/conversion.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/lib/Sema/SemaChecking.cpp b/lib/Sema/SemaChecking.cpp index fe5e8aca3d..ef7dc8819f 100644 --- a/lib/Sema/SemaChecking.cpp +++ b/lib/Sema/SemaChecking.cpp @@ -4432,8 +4432,7 @@ void CheckImplicitConversion(Sema &S, Expr *E, QualType T, if ((E->isNullPointerConstant(S.Context, Expr::NPC_ValueDependentIsNotNull) == Expr::NPCK_GNUNull) && !Target->isAnyPointerType() - && !Target->isBlockPointerType() && !Target->isFunctionPointerType() - && !Target->isMemberFunctionPointerType()) { + && !Target->isBlockPointerType() && !Target->isMemberPointerType()) { SourceLocation Loc = E->getSourceRange().getBegin(); if (Loc.isMacroID()) Loc = S.SourceMgr.getImmediateExpansionRange(Loc).first; diff --git a/test/SemaCXX/conversion.cpp b/test/SemaCXX/conversion.cpp index ad6e321dd3..ac235cc7fe 100644 --- a/test/SemaCXX/conversion.cpp +++ b/test/SemaCXX/conversion.cpp @@ -90,6 +90,14 @@ void test3() { ; do ; while(NULL_COND(true)); + int *ip = NULL; + int (*fp)() = NULL; + struct foo { + int n; + void func(); + }; + int foo::*datamem = NULL; + int (foo::*funmem)() = NULL; } namespace test4 { -- 2.40.0