From: Jordan Rose Date: Sat, 22 Sep 2012 01:25:00 +0000 (+0000) Subject: [analyzer] Track a null value back through FindLastStoreBRVisitor. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=53221da865144db0ba6bd89ab30bcf81de0fe5d2;p=clang [analyzer] Track a null value back through FindLastStoreBRVisitor. Also, tidy up the other tracking visitors so that they mark the right things as interesting and don't do extra work. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@164448 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp b/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp index e1a93673f6..445500ba31 100644 --- a/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp +++ b/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp @@ -175,11 +175,15 @@ public: Node = Node->getFirstPred(); // Finally, see if we inlined the call. - if (Node) - if (const CallExitEnd *CEE = Node->getLocationAs()) - if (CEE->getCalleeContext()->getCallSite() == S) - BR.addVisitor(new ReturnVisitor(CEE->getCalleeContext())); - + if (Node) { + if (const CallExitEnd *CEE = Node->getLocationAs()) { + const StackFrameContext *CalleeContext = CEE->getCalleeContext(); + if (CalleeContext->getCallSite() == S) { + BR.markInteresting(CalleeContext); + BR.addVisitor(new ReturnVisitor(CalleeContext)); + } + } + } } PathDiagnosticPiece *VisitNode(const ExplodedNode *N, @@ -219,25 +223,24 @@ public: assert(RetE && "Tracking a return value for a void function"); RetE = RetE->IgnoreParenCasts(); - // See if we know that the return value is 0. - ProgramStateRef StNonZero, StZero; - llvm::tie(StNonZero, StZero) = State->assume(cast(V)); - if (StZero && !StNonZero) { - // If we're returning 0, we should track where that 0 came from. - bugreporter::trackNullOrUndefValue(N, RetE, BR); - - if (isa(V)) { - if (RetE->getType()->isObjCObjectPointerType()) - Out << "Returning nil"; - else - Out << "Returning null pointer"; - } else { - Out << "Returning zero"; - } - } else { - // FIXME: We can probably do better than this. + // If we can't prove the return value is 0, just mark it interesting, and + // make sure to track it into any further inner functions. + if (State->assume(cast(V), true)) { BR.markInteresting(V); - Out << "Value returned here"; + ReturnVisitor::addVisitorIfNecessary(N, RetE, BR); + return 0; + } + + // If we're returning 0, we should track where that 0 came from. + bugreporter::trackNullOrUndefValue(N, RetE, BR); + + if (isa(V)) { + if (RetE->getType()->isObjCObjectPointerType()) + Out << "Returning nil"; + else + Out << "Returning null pointer"; + } else { + Out << "Returning zero"; } // FIXME: We should have a more generalized location printing mechanism. @@ -320,11 +323,15 @@ PathDiagnosticPiece *FindLastStoreBRVisitor::VisitNode(const ExplodedNode *Succ, return NULL; satisfied = true; - // If the value that was stored came from an inlined call, make sure we - // step into the call. + // If we have an expression that provided the value, try to track where it + // came from. if (InitE) { InitE = InitE->IgnoreParenCasts(); - ReturnVisitor::addVisitorIfNecessary(StoreSite, InitE, BR); + + if (V.isUndef() || isa(V)) + bugreporter::trackNullOrUndefValue(StoreSite, InitE, BR); + else + ReturnVisitor::addVisitorIfNecessary(StoreSite, InitE, BR); } if (!R->canPrintPretty()) @@ -545,7 +552,7 @@ void bugreporter::trackNullOrUndefValue(const ExplodedNode *N, const Stmt *S, // If the contents are symbolic, find out when they became null. if (V.getAsLocSymbol()) { BugReporterVisitor *ConstraintTracker - = new TrackConstraintBRVisitor(cast(V), false); + = new TrackConstraintBRVisitor(cast(V), false); report.addVisitor(ConstraintTracker); } @@ -580,6 +587,8 @@ void bugreporter::trackNullOrUndefValue(const ExplodedNode *N, const Stmt *S, } else { // Otherwise, if the value came from an inlined function call, // we should at least make sure that function isn't pruned in our output. + if (const Expr *E = dyn_cast(S)) + S = E->IgnoreParenCasts(); ReturnVisitor::addVisitorIfNecessary(N, S, report); } } diff --git a/test/Analysis/inline-plist.c b/test/Analysis/inline-plist.c index 48ba6cfd2f..6c8daf5d5e 100644 --- a/test/Analysis/inline-plist.c +++ b/test/Analysis/inline-plist.c @@ -38,7 +38,8 @@ void triggers_bug(int *p) { void bar(int *p) { if (!!p) { // expected-note@-1 {{Assuming 'p' is null}} - // expected-note@-2 {{Taking false branch}} + // expected-note@-2 {{Assuming pointer value is null}} + // expected-note@-3 {{Taking false branch}} return; } @@ -547,6 +548,35 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: depth0 // CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line39 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message // CHECK-NEXT: Assuming 'p' is null @@ -572,12 +602,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line45 +// CHECK-NEXT: line46 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line45 +// CHECK-NEXT: line46 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -593,12 +623,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line45 +// CHECK-NEXT: line46 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line45 +// CHECK-NEXT: line46 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -606,12 +636,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col16 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -627,12 +657,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col16 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -640,12 +670,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -657,7 +687,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -665,12 +695,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -686,7 +716,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -694,12 +724,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line47 +// CHECK-NEXT: line48 // CHECK-NEXT: col19 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -809,7 +839,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -817,12 +847,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -842,12 +872,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line58 +// CHECK-NEXT: line59 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -855,12 +885,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -872,7 +902,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -880,12 +910,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line61 +// CHECK-NEXT: line62 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -901,7 +931,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -919,12 +949,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line59 +// CHECK-NEXT: line60 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -932,12 +962,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -949,7 +979,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -957,12 +987,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -980,7 +1010,7 @@ void test_block_arg() { // CHECK-NEXT: typeDereference of null pointer // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line60 +// CHECK-NEXT: line61 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -996,12 +1026,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1009,12 +1039,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1026,7 +1056,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1034,12 +1064,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line69 +// CHECK-NEXT: line70 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1055,7 +1085,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1073,12 +1103,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1086,12 +1116,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1103,7 +1133,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1111,12 +1141,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1136,12 +1166,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line67 +// CHECK-NEXT: line68 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1149,12 +1179,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line68 +// CHECK-NEXT: line69 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line68 +// CHECK-NEXT: line69 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1166,7 +1196,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line68 +// CHECK-NEXT: line69 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1174,12 +1204,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line68 +// CHECK-NEXT: line69 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line68 +// CHECK-NEXT: line69 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1195,7 +1225,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1203,12 +1233,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line69 +// CHECK-NEXT: line70 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1228,12 +1258,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1241,12 +1271,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1262,12 +1292,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col12 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1275,12 +1305,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1292,7 +1322,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1300,12 +1330,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1325,12 +1355,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line66 +// CHECK-NEXT: line67 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1338,12 +1368,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1355,7 +1385,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1363,12 +1393,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1389,7 +1419,7 @@ void test_block_arg() { // CHECK-NEXT: issue_hash5 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line70 +// CHECK-NEXT: line71 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1405,12 +1435,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line74 +// CHECK-NEXT: line75 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line74 +// CHECK-NEXT: line75 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1418,12 +1448,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1435,7 +1465,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1443,12 +1473,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1464,7 +1494,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1482,12 +1512,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1495,12 +1525,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1512,7 +1542,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1520,12 +1550,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line76 +// CHECK-NEXT: line77 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1541,7 +1571,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1549,12 +1579,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line77 +// CHECK-NEXT: line78 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1574,12 +1604,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line75 +// CHECK-NEXT: line76 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1587,12 +1617,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1604,7 +1634,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1612,12 +1642,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1638,7 +1668,7 @@ void test_block_arg() { // CHECK-NEXT: issue_hash5 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line78 +// CHECK-NEXT: line79 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1654,12 +1684,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line82 +// CHECK-NEXT: line83 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1667,12 +1697,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1684,7 +1714,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1692,12 +1722,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line85 +// CHECK-NEXT: line86 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1713,7 +1743,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1731,12 +1761,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1744,12 +1774,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1761,7 +1791,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1769,12 +1799,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line84 +// CHECK-NEXT: line85 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1790,7 +1820,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1798,12 +1828,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line85 +// CHECK-NEXT: line86 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1823,12 +1853,12 @@ void test_block_arg() { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line83 +// CHECK-NEXT: line84 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1836,12 +1866,12 @@ void test_block_arg() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1853,7 +1883,7 @@ void test_block_arg() { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1861,12 +1891,12 @@ void test_block_arg() { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -1887,7 +1917,7 @@ void test_block_arg() { // CHECK-NEXT: issue_hash5 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line86 +// CHECK-NEXT: line87 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: diff --git a/test/Analysis/inlining/path-notes.c b/test/Analysis/inlining/path-notes.c index f098db9d70..bd44f0c895 100644 --- a/test/Analysis/inlining/path-notes.c +++ b/test/Analysis/inlining/path-notes.c @@ -98,6 +98,20 @@ void testStoreZero(int *a) { // expected-note@-1 {{Dereference of null pointer (loaded from variable 'a')}} } +void usePointer(int *p) { + *p = 1; // expected-warning{{Dereference of null pointer}} + // expected-note@-1 {{Dereference of null pointer}} +} + +void testUseOfNullPointer() { + // Test the case where an argument expression is itself a call. + usePointer(getZero()); + // expected-note@-1 {{Calling 'getZero'}} + // expected-note@-2 {{Returning from 'getZero'}} + // expected-note@-3 {{Passing null pointer value via 1st parameter 'p'}} + // expected-note@-4 {{Calling 'usePointer'}} +} + // CHECK: diagnostics // CHECK-NEXT: // CHECK-NEXT: @@ -130,7 +144,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'zero' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'zero' +// CHECK-NEXT: Calling 'zero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -144,7 +158,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testZero' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testZero' +// CHECK-NEXT: Entered call from 'testZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -207,7 +221,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Null pointer value stored to 'a' // CHECK-NEXT: message -// CHECK-NEXT: Null pointer value stored to 'a' +// CHECK-NEXT: Null pointer value stored to 'a' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -236,7 +250,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'zero' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'zero' +// CHECK-NEXT: Returning from 'zero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -299,7 +313,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -345,7 +359,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'check' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'check' +// CHECK-NEXT: Calling 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -359,7 +373,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testCheck' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testCheck' +// CHECK-NEXT: Entered call from 'testCheck' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -456,7 +470,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -485,7 +499,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming pointer value is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: Assuming pointer value is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -548,7 +562,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'check' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'check' +// CHECK-NEXT: Returning from 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -611,7 +625,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -657,7 +671,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'a' initialized here // CHECK-NEXT: message -// CHECK-NEXT: Variable 'a' initialized here +// CHECK-NEXT: Variable 'a' initialized here // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -720,7 +734,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'check' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'check' +// CHECK-NEXT: Calling 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -734,7 +748,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testInitCheck' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testInitCheck' +// CHECK-NEXT: Entered call from 'testInitCheck' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -831,7 +845,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -894,7 +908,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'check' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'check' +// CHECK-NEXT: Returning from 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -957,7 +971,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -1003,7 +1017,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Value assigned to 'a' // CHECK-NEXT: message -// CHECK-NEXT: Value assigned to 'a' +// CHECK-NEXT: Value assigned to 'a' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1066,7 +1080,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'check' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'check' +// CHECK-NEXT: Calling 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -1080,7 +1094,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testStoreCheck' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testStoreCheck' +// CHECK-NEXT: Entered call from 'testStoreCheck' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1177,7 +1191,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1240,7 +1254,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'check' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'check' +// CHECK-NEXT: Returning from 'check' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1303,7 +1317,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -1383,7 +1397,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -1397,7 +1411,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testReturnZero' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testReturnZero' +// CHECK-NEXT: Entered call from 'testReturnZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1460,7 +1474,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1523,7 +1537,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: message -// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -1552,7 +1566,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1649,7 +1663,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: Dereference of null pointer // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer @@ -1729,7 +1743,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -1743,7 +1757,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testReturnZero2' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testReturnZero2' +// CHECK-NEXT: Entered call from 'testReturnZero2' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1806,7 +1820,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1869,7 +1883,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: message -// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -1898,7 +1912,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1995,7 +2009,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer +// CHECK-NEXT: Dereference of null pointer // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer @@ -2075,7 +2089,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -2089,7 +2103,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testInitZero' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testInitZero' +// CHECK-NEXT: Entered call from 'testInitZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2152,7 +2166,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2215,7 +2229,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: message -// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -2244,7 +2258,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2341,7 +2355,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'a' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'a' initialized to a null pointer value +// CHECK-NEXT: Variable 'a' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2404,7 +2418,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -2484,7 +2498,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: Calling 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -2498,7 +2512,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Entered call from 'testStoreZero' // CHECK-NEXT: message -// CHECK-NEXT: Entered call from 'testStoreZero' +// CHECK-NEXT: Entered call from 'testStoreZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2561,7 +2575,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2624,7 +2638,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: message -// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: Returning null pointer (loaded from 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -2653,7 +2667,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: message -// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: Returning from 'getZero' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2750,7 +2764,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Null pointer value stored to 'a' // CHECK-NEXT: message -// CHECK-NEXT: Null pointer value stored to 'a' +// CHECK-NEXT: Null pointer value stored to 'a' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -2813,7 +2827,7 @@ void testStoreZero(int *a) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'a') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'a') @@ -2829,5 +2843,422 @@ void testStoreZero(int *a) { // 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: line108 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col20 +// 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: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'getZero' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line61 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'testUseOfNullPointer' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'testUseOfNullPointer' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line61 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line61 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// 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: line62 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: message +// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line62 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col8 +// 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: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line65 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Returning null pointer (loaded from 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: message +// CHECK-NEXT: Returning from 'getZero' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col12 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col20 +// 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: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col14 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col22 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Passing null pointer value via 1st parameter 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Passing null pointer value via 1st parameter 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line108 +// CHECK-NEXT: col23 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'usePointer' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'usePointer' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line101 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'testUseOfNullPointer' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'testUseOfNullPointer' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line101 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line101 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col3 +// 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: line102 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col4 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: message +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDereference of null pointer +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextusePointer +// CHECK-NEXT: issue_hash1 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line102 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: diff --git a/test/Analysis/plist-output-alternate.m b/test/Analysis/plist-output-alternate.m index 49d2bbb7fd..719ff003a3 100644 --- a/test/Analysis/plist-output-alternate.m +++ b/test/Analysis/plist-output-alternate.m @@ -89,7 +89,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -152,7 +152,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') @@ -232,7 +232,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Null pointer value stored to 'p' // CHECK-NEXT: message -// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: Null pointer value stored to 'p' // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -295,7 +295,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') @@ -335,6 +335,69 @@ void rdar8331641(int x) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// 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: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: line18 // CHECK-NEXT: col3 // CHECK-NEXT: file0 @@ -375,7 +438,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'q' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'q' initialized to a null pointer value +// CHECK-NEXT: Variable 'q' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -438,7 +501,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'q') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'q') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'q') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'q') @@ -518,7 +581,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'p' is null +// CHECK-NEXT: Assuming 'p' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindevent @@ -547,7 +610,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming pointer value is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: Assuming pointer value is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -610,7 +673,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') @@ -688,9 +751,38 @@ void rdar8331641(int x) { // CHECK-NEXT: // CHECK-NEXT: depth0 // CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'q' is null // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'q' is null +// CHECK-NEXT: Assuming 'q' is null // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -753,7 +845,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: message -// CHECK-NEXT: Variable 'p' initialized to a null pointer value +// CHECK-NEXT: Variable 'p' initialized to a null pointer value // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -816,7 +908,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') +// CHECK-NEXT: Dereference of null pointer (loaded from variable 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from variable 'p') @@ -930,7 +1022,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Dereference of null pointer (loaded from field 'p') // CHECK-NEXT: message -// CHECK-NEXT: Dereference of null pointer (loaded from field 'p') +// CHECK-NEXT: Dereference of null pointer (loaded from field 'p') // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionDereference of null pointer (loaded from field 'p') @@ -1044,7 +1136,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count // CHECK-NEXT: message -// CHECK-NEXT: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count +// CHECK-NEXT: Call to function 'CFNumberCreate' returns a Core Foundation object with a +1 retain count // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1141,7 +1233,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'x' is 0 // CHECK-NEXT: message -// CHECK-NEXT: Assuming 'x' is 0 +// CHECK-NEXT: Assuming 'x' is 0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: kindcontrol @@ -1223,7 +1315,7 @@ void rdar8331641(int x) { // CHECK-NEXT: extended_message // CHECK-NEXT: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 // CHECK-NEXT: message -// CHECK-NEXT: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 +// CHECK-NEXT: Object leaked: object allocated and stored into 'value' is not referenced later in this execution path and has a retain count of +1 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: descriptionPotential leak of an object stored into 'value' diff --git a/test/Analysis/plist-output.m b/test/Analysis/plist-output.m index 74923acca7..52073e4afe 100644 --- a/test/Analysis/plist-output.m +++ b/test/Analysis/plist-output.m @@ -367,6 +367,69 @@ void rdar12280665() { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// 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: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: message +// CHECK-NEXT: Null pointer value stored to 'p' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line17 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: line18 // CHECK-NEXT: col3 // CHECK-NEXT: file0 @@ -720,6 +783,35 @@ void rdar12280665() { // CHECK-NEXT: // CHECK-NEXT: depth0 // CHECK-NEXT: extended_message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: message +// CHECK-NEXT: Assuming pointer value is null +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line29 +// CHECK-NEXT: col8 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message // CHECK-NEXT: Assuming 'q' is null // CHECK-NEXT: message // CHECK-NEXT: Assuming 'q' is null