aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Blaikie <dblaikie@gmail.com>2012-06-21 18:51:10 +0000
committerDavid Blaikie <dblaikie@gmail.com>2012-06-21 18:51:10 +0000
commit28a5f0cdfcc927a94c1bda6a225200762df22411 (patch)
treec9ce84abcb3bdb592e17d37b55e29f8c8cb6a44a
parent56242baaae6c45b24fbdd5bc56fe4ee516fa9e6b (diff)
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
-rw-r--r--lib/Sema/SemaChecking.cpp3
-rw-r--r--test/SemaCXX/conversion.cpp8
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 {