[analyzer] Add a test case for printing a path note at a PreStmt point.

This is also a false-positive test case for <rdar://problem/12415065>.

<rdar://problem/12687586>

llvm-svn: 167994
This commit is contained in:
Jordan Rose 2012-11-14 23:03:55 +00:00
parent 560910c9b8
commit 5a29f3c05e
1 changed files with 28 additions and 1 deletions

View File

@ -1,4 +1,4 @@
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core -analyzer-store=region -fblocks -verify %s
// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -analyze -analyzer-checker=core -analyzer-store=region -fblocks -analyzer-opt-analyze-nested-blocks -verify %s
//===----------------------------------------------------------------------===//
// The following code is reduced using delta-debugging from Mac OS X headers:
@ -26,6 +26,7 @@ typedef struct _NSZone NSZone;
@protocol NSCoding - (void)encodeWithCoder:(NSCoder *)aCoder; @end
@interface NSObject <NSObject> {}
+ (id)alloc;
- (id)init;
- (id)copy;
@end
extern id NSAllocateObject(Class aClass, NSUInteger extraBytes, NSZone *zone);
@ -94,3 +95,29 @@ void testMessaging() {
// <rdar://problem/12119814>
[[^(){} copy] release];
}
// FALSE POSITIVE <rdar://problem/12415065>
@interface rdar12415065
@end
@implementation rdar12415065
- (void)test {
// At one point this crashed because we created a path note at a
// PreStmtPurgeDeadSymbols point but only knew how to deal with PostStmt
// points. <rdar://problem/12687586>
extern dispatch_queue_t queue;
if (!queue)
return;
dispatch_async(queue, ^{
double x = 0.0;
if (24.0f < x) {
dispatch_async(queue, ^{ (void)x; });
[self test];
}
});
}
@end