diff options
author | Ted Kremenek <kremenek@apple.com> | 2009-11-20 00:12:36 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2009-11-20 00:12:36 +0000 |
commit | 71a5e2841d7a6f3f77230970a7d15bd2cb9e118e (patch) | |
tree | 5671f687b243f42889acca43669800f11b627a0d | |
parent | a84b4044b79f2cc424c6ae7ee5edb97e948ba806 (diff) |
Fix null dereference in NSAutoreleasePoolChecker when analyzing messages sent to blocks.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89413 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Analysis/NSAutoreleasePoolChecker.cpp | 3 | ||||
-rw-r--r-- | test/Analysis/retain-release-gc-only.m | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/lib/Analysis/NSAutoreleasePoolChecker.cpp b/lib/Analysis/NSAutoreleasePoolChecker.cpp index e0a8d0dc5f..190c381ebd 100644 --- a/lib/Analysis/NSAutoreleasePoolChecker.cpp +++ b/lib/Analysis/NSAutoreleasePoolChecker.cpp @@ -65,6 +65,9 @@ NSAutoreleasePoolChecker::PreVisitObjCMessageExpr(CheckerContext &C, // the type of the expression. const ObjCObjectPointerType* PT = receiver->getType()->getAs<ObjCObjectPointerType>(); + + if (!PT) + return; const ObjCInterfaceDecl* OD = PT->getInterfaceDecl(); if (!OD) return; diff --git a/test/Analysis/retain-release-gc-only.m b/test/Analysis/retain-release-gc-only.m index 3eeebc4a8f..6bf5039749 100644 --- a/test/Analysis/retain-release-gc-only.m +++ b/test/Analysis/retain-release-gc-only.m @@ -332,6 +332,17 @@ void rdar_6250216(void) { [pool release]; // expected-warning{{Use -drain instead of -release when using NSAutoreleasePool and garbage collection}} } + +//===----------------------------------------------------------------------===// +// <rdar://problem/7407273> Don't crash when analyzing messages sent to blocks +//===----------------------------------------------------------------------===// + +@class RDar7407273; +typedef void (^RDar7407273Block)(RDar7407273 *operation); +void rdar7407273(RDar7407273Block b) { + [b copy]; +} + //===----------------------------------------------------------------------===// // Tests of ownership attributes. //===----------------------------------------------------------------------===// |