]> granicus.if.org Git - clang/commitdiff
Fix null dereference in NSAutoreleasePoolChecker when analyzing messages sent to...
authorTed Kremenek <kremenek@apple.com>
Fri, 20 Nov 2009 00:12:36 +0000 (00:12 +0000)
committerTed Kremenek <kremenek@apple.com>
Fri, 20 Nov 2009 00:12:36 +0000 (00:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89413 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/NSAutoreleasePoolChecker.cpp
test/Analysis/retain-release-gc-only.m

index e0a8d0dc5f73dcaf845152386bbc10ca1888178e..190c381ebddc8c532a2db30e63f7152f103e2fad 100644 (file)
@@ -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;  
index 3eeebc4a8f0a652bc273dab9873112987453c065..6bf5039749c3ba4c45807ad9ded8be0bb21e0a0b 100644 (file)
@@ -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.
 //===----------------------------------------------------------------------===//