From: Anna Zaks Date: Mon, 13 May 2013 23:49:51 +0000 (+0000) Subject: [analyzer] Refactor: address Jordan’s code review of r181738. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ef202c35b37c137e32fe30f4453915b6d3b525d7;p=clang [analyzer] Refactor: address Jordan’s code review of r181738. (Modifying the checker to record that the values are no longer nil will be done separately.) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181744 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp index c723e4f29b..ba779ff191 100644 --- a/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp +++ b/lib/StaticAnalyzer/Checkers/BasicObjCFoundationChecks.cpp @@ -105,7 +105,7 @@ namespace { bool CanBeSubscript = false) const; void generateBugReport(ExplodedNode *N, - llvm::raw_svector_ostream &os, + StringRef Msg, SourceRange Range, const Expr *Expr, CheckerContext &C) const; @@ -123,14 +123,10 @@ void NilArgChecker::warnIfNilExpr(const Expr *E, const char *Msg, CheckerContext &C) const { ProgramStateRef State = C.getState(); - SVal SV = State->getSVal(E, C.getLocationContext()); - if (State->isNull(SV).isConstrainedTrue()) { + if (State->isNull(C.getSVal(E)).isConstrainedTrue()) { if (ExplodedNode *N = C.generateSink()) { - SmallString<128> sbuf; - llvm::raw_svector_ostream os(sbuf); - os << Msg; - generateBugReport(N, os, E->getSourceRange(), E, C); + generateBugReport(N, Msg, E->getSourceRange(), E, C); } } @@ -180,22 +176,22 @@ void NilArgChecker::warnIfNilArg(CheckerContext &C, } } - generateBugReport(N, os, msg.getArgSourceRange(Arg), + generateBugReport(N, os.str(), msg.getArgSourceRange(Arg), msg.getArgExpr(Arg), C); } } void NilArgChecker::generateBugReport(ExplodedNode *N, - llvm::raw_svector_ostream &os, + StringRef Msg, SourceRange Range, - const Expr *Expr, + const Expr *E, CheckerContext &C) const { if (!BT) BT.reset(new APIMisuse("nil argument")); - BugReport *R = new BugReport(*BT, os.str(), N); + BugReport *R = new BugReport(*BT, Msg, N); R->addRange(Range); - bugreporter::trackNullOrUndefValue(N, Expr, *R); + bugreporter::trackNullOrUndefValue(N, E, *R); C.emitReport(R); } @@ -290,14 +286,16 @@ void NilArgChecker::checkPreObjCMessage(const ObjCMethodCall &msg, void NilArgChecker::checkPostStmt(const ObjCArrayLiteral *AL, CheckerContext &C) const { - for (unsigned i = 0; i < AL->getNumElements(); ++i) { + unsigned NumOfElements = AL->getNumElements(); + for (unsigned i = 0; i < NumOfElements; ++i) { warnIfNilExpr(AL->getElement(i), "Array element cannot be nil", C); } } void NilArgChecker::checkPostStmt(const ObjCDictionaryLiteral *DL, CheckerContext &C) const { - for (unsigned i = 0; i < DL->getNumElements(); ++i) { + unsigned NumOfElements = DL->getNumElements(); + for (unsigned i = 0; i < NumOfElements; ++i) { ObjCDictionaryElement Element = DL->getKeyValueElement(i); warnIfNilExpr(Element.Key, "Dictionary key cannot be nil", C); warnIfNilExpr(Element.Value, "Dictionary value cannot be nil", C); diff --git a/test/Analysis/inlining/path-notes.m b/test/Analysis/inlining/path-notes.m index 74f088a382..602bad188a 100644 --- a/test/Analysis/inlining/path-notes.m +++ b/test/Analysis/inlining/path-notes.m @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=text -analyzer-config suppress-null-return-paths=false -fblocks -verify %s -// RUN: %clang_cc1 -analyze -analyzer-checker=core -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false -fblocks %s -o %t.plist +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NilArg -analyzer-output=text -analyzer-config suppress-null-return-paths=false -fblocks -verify %s +// RUN: %clang_cc1 -analyze -analyzer-checker=core,osx.cocoa.NilArg -analyzer-output=plist-multi-file -analyzer-config suppress-null-return-paths=false -fblocks %s -o %t.plist // RUN: FileCheck --input-file=%t.plist %s typedef struct dispatch_queue_s *dispatch_queue_t; @@ -11,6 +11,57 @@ void dispatch_sync(dispatch_queue_t, dispatch_block_t); @property int *p; @end +typedef unsigned long NSUInteger; +typedef signed char BOOL; +typedef struct _NSZone NSZone; +@class NSInvocation, NSMethodSignature, NSCoder, NSString, NSEnumerator; +@protocol NSObject +@end +@protocol NSCopying +- (id)copyWithZone:(NSZone *)zone; +@end +@protocol NSMutableCopying +- (id)mutableCopyWithZone:(NSZone *)zone; +@end +@protocol NSCoding +- (void)encodeWithCoder:(NSCoder *)aCoder; +@end +@protocol NSFastEnumeration +@end +@protocol NSSecureCoding +@required ++ (BOOL)supportsSecureCoding; +@end +@interface NSObject {} +- (id)init; ++ (id)alloc; +@end +@interface NSArray : NSObject + +- (NSUInteger)count; +- (id)objectAtIndex:(NSUInteger)index; + +@end + +@interface NSArray (NSExtendedArray) +- (NSArray *)arrayByAddingObject:(id)anObject; +- (void)setObject:(id)obj atIndexedSubscript:(NSUInteger)idx __attribute__((availability(macosx,introduced=10.8))); +@end + +@interface NSArray (NSArrayCreation) ++ (instancetype)arrayWithObjects:(const id [])objects count:(NSUInteger)cnt; +@end + +@interface NSMutableArray : NSArray + +- (void)addObject:(id)anObject; +- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; +- (void)removeLastObject; +- (void)removeObjectAtIndex:(NSUInteger)index; +- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; + +@end + int *getZeroIfNil(Test *x) { return x.p; // expected-note@-1 {{'p' not called because the receiver is nil}} @@ -89,6 +140,12 @@ void testNilReceiver(id *x) { // expected-note@-3 {{Calling 'testNilReceiverHelper'}} } +id testCreateArrayLiteral(id myNil) { + if (myNil) // expected-note {{Assuming 'myNil' is nil}} + ; // expected-note@-1 {{Taking false branch}} + return @[ @"a", myNil, @"c" ]; // expected-warning {{Array element cannot be nil}} + //expected-note@-1 {{Array element cannot be nil}} +} // CHECK: diagnostics // CHECK-NEXT: @@ -103,12 +160,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -116,12 +173,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -133,7 +190,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -141,12 +198,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -166,12 +223,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col17 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -179,12 +236,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -196,7 +253,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -204,12 +261,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -225,7 +282,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line65 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -243,12 +300,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line65 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line14 +// CHECK-NEXT: line65 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -256,12 +313,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -277,12 +334,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -290,12 +347,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -307,7 +364,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -315,12 +372,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -340,12 +397,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -353,12 +410,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -370,7 +427,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -378,12 +435,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line15 +// CHECK-NEXT: line66 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -399,7 +456,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -407,12 +464,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -432,12 +489,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -445,12 +502,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -462,7 +519,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -470,12 +527,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -496,7 +553,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line21 +// CHECK-NEXT: line72 // CHECK-NEXT: col20 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -512,12 +569,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line30 +// CHECK-NEXT: line81 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line30 +// CHECK-NEXT: line81 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -525,12 +582,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -542,7 +599,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -550,12 +607,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line41 +// CHECK-NEXT: line92 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -599,7 +656,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -617,12 +674,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -630,12 +687,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line89 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line89 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -647,7 +704,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line89 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -655,12 +712,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line89 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line38 +// CHECK-NEXT: line89 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -690,7 +747,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -698,12 +755,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line41 +// CHECK-NEXT: line92 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -723,12 +780,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line36 +// CHECK-NEXT: line87 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -736,12 +793,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -753,7 +810,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -761,12 +818,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -787,7 +844,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash14 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line43 +// CHECK-NEXT: line94 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -803,12 +860,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line102 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line51 +// CHECK-NEXT: line102 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -816,12 +873,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col15 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -833,7 +890,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -841,12 +898,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line62 +// CHECK-NEXT: line113 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -890,7 +947,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -908,12 +965,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line56 +// CHECK-NEXT: line107 // CHECK-NEXT: col30 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -921,12 +978,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -938,7 +995,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -946,12 +1003,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -971,12 +1028,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line109 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -984,12 +1041,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1001,7 +1058,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1009,12 +1066,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1032,7 +1089,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: typeuninitialized variable captured by block // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line111 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1048,12 +1105,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line133 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line133 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1061,12 +1118,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1082,12 +1139,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col23 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1095,12 +1152,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1112,7 +1169,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1120,12 +1177,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col27 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1145,12 +1202,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1158,12 +1215,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1175,7 +1232,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1183,12 +1240,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col35 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1204,7 +1261,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1212,12 +1269,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line137 // CHECK-NEXT: col36 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1233,7 +1290,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line127 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1251,12 +1308,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line127 // CHECK-NEXT: col1 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line127 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1264,12 +1321,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1285,12 +1342,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1298,12 +1355,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1315,7 +1372,7 @@ void testNilReceiver(id *x) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1323,12 +1380,12 @@ void testNilReceiver(id *x) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1349,9 +1406,186 @@ void testNilReceiver(id *x) { // CHECK-NEXT: issue_hash1 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line128 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming 'myNil' is nil +// CHECK-NEXT: message +// CHECK-NEXT: Assuming 'myNil' is nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line144 +// CHECK-NEXT: col11 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col19 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Array element cannot be nil +// CHECK-NEXT: message +// CHECK-NEXT: Array element cannot be nil +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionArray element cannot be nil +// CHECK-NEXT: categoryAPI Misuse (Apple) +// CHECK-NEXT: typenil argument +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contexttestCreateArrayLiteral +// CHECK-NEXT: issue_hash3 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line146 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: