From: Jordan Rose Date: Fri, 24 May 2013 21:43:05 +0000 (+0000) Subject: [analyzer; new edges] Properly set location after exiting an inlined call. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5a6fb20841220488f8be7254fbea8ba7233ebcd3;p=clang [analyzer; new edges] Properly set location after exiting an inlined call. The new edge algorithm would keep track of the previous location in each location context, so that it could draw arrows coming in and out of each inlined call. However, it tried to access the location of the call before it was actually set (at the CallEnter node). This only affected unterminated calls at the end of a path; calls with visible exit nodes already had a valid location. This patch ditches the location context map, since we're processing the nodes in order anyway, and just unconditionally updates the PrevLoc variable after popping out of an inlined call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@182676 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/StaticAnalyzer/Core/BugReporter.cpp b/lib/StaticAnalyzer/Core/BugReporter.cpp index 50a1e8cbac..b45d051322 100644 --- a/lib/StaticAnalyzer/Core/BugReporter.cpp +++ b/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -1588,11 +1588,7 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, StackDiagVector CallStack; InterestingExprs IE; - // Record the last location for a given visited stack frame. - llvm::DenseMap - PrevLocMap; - PrevLocMap[N->getLocationContext()->getCurrentStackFrame()] = - PD.getLocation(); + PathDiagnosticLocation PrevLoc = PD.getLocation(); const ExplodedNode *NextNode = N->getFirstPred(); while (NextNode) { @@ -1633,17 +1629,16 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, // If this is the first item in the active path, record // the new mapping from active path to location context. const LocationContext *&NewLC = LCM[&PD.getActivePath()]; - if (!NewLC) { + if (!NewLC) NewLC = N->getLocationContext(); - } - PDB.LC = NewLC; - // Update the previous location in the active path - // since we just created the call piece lazily. - PrevLocMap[PDB.LC->getCurrentStackFrame()] = C->getLocation(); + PDB.LC = NewLC; } C->setCallee(*CE, SM); + // Update the previous location in the active path. + PrevLoc = C->getLocation(); + if (!CallStack.empty()) { assert(CallStack.back().first == C); CallStack.pop_back(); @@ -1655,12 +1650,6 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, // as processing CallEnter may change the active path. PDB.LC = N->getLocationContext(); - // Get the previous location for the current active - // location context. All edges will be based on this - // location, and it will be updated in place. - PathDiagnosticLocation &PrevLoc = - PrevLocMap[PDB.LC->getCurrentStackFrame()]; - // Record the mapping from the active path to the location // context. assert(!LCM[&PD.getActivePath()] || @@ -1688,6 +1677,7 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, // Add the edge to the return site. addEdgeToPath(PD.getActivePath(), PrevLoc, C->callReturn, PDB.LC); PD.getActivePath().push_front(C); + PrevLoc.invalidate(); // Make the contents of the call the active path for now. PD.pushActivePath(&C->path); @@ -1802,11 +1792,6 @@ GenerateAlternateExtensivePathDiagnostic(PathDiagnostic& PD, if (!NextNode) continue; - // Since the active path may have been updated prior - // to this point, query the active location context now. - PathDiagnosticLocation &PrevLoc = - PrevLocMap[PDB.LC->getCurrentStackFrame()]; - // Add pieces from custom visitors. for (ArrayRef::iterator I = visitors.begin(), E = visitors.end(); diff --git a/test/Analysis/edges-new.m b/test/Analysis/edges-new.m index 45940aa0da..d5ac95176a 100644 --- a/test/Analysis/edges-new.m +++ b/test/Analysis/edges-new.m @@ -309,6 +309,36 @@ void test_IPA_Y(IPA_Y *y) { *[x getPointer] = 1; } +// From diagnostics/report-issues-within-main-file.cpp: +void causeDivByZeroInMain(int in) { + int m = 0; + m = in/m; + m++; +} + +void mainPlusMain() { + int i = 0; + i++; + causeDivByZeroInMain(i); + i++; +} + +// From inlining/path-notes.c: +int *getZero() { + int *p = 0; + return p; +} + +void usePointer(int *p) { + *p = 1; +} + +void testUseOfNullPointer() { + // Test the case where an argument expression is itself a call. + usePointer(getZero()); +} + + //===----------------------------------------------------------------------===// // Misc. tests. //===----------------------------------------------------------------------===// @@ -8455,10 +8485,196 @@ void testCast(int coin) { // 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: line320 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line320 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line322 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line322 +// CHECK-NEXT: col22 +// 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: line322 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line322 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line322 +// CHECK-NEXT: col25 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth0 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: message +// CHECK-NEXT: Calling 'causeDivByZeroInMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line313 +// CHECK-NEXT: col1 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: message +// CHECK-NEXT: Entered call from 'mainPlusMain' +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindevent +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line314 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line314 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line314 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: message +// CHECK-NEXT: 'm' initialized to 0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: kindcontrol +// CHECK-NEXT: edges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: start +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line314 +// CHECK-NEXT: col3 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line314 +// CHECK-NEXT: col5 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: end +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line315 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line315 +// CHECK-NEXT: col9 +// 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: line315 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: ranges +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line315 +// CHECK-NEXT: col7 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: line315 +// CHECK-NEXT: col10 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: depth1 +// CHECK-NEXT: extended_message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: message +// CHECK-NEXT: Division by zero +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: descriptionDivision by zero +// CHECK-NEXT: categoryLogic error +// CHECK-NEXT: typeDivision by zero +// CHECK-NEXT: issue_context_kindfunction +// CHECK-NEXT: issue_contextcauseDivByZeroInMain +// CHECK-NEXT: issue_hash2 +// CHECK-NEXT: location +// CHECK-NEXT: +// CHECK-NEXT: line315 +// CHECK-NEXT: col9 +// CHECK-NEXT: file0 +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: +// CHECK-NEXT: path +// CHECK-NEXT: +// CHECK-NEXT: // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line321 +// CHECK-NEXT: line351 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8466,12 +8682,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line321 +// CHECK-NEXT: line351 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line321 +// CHECK-NEXT: line351 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8491,12 +8707,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line321 +// CHECK-NEXT: line351 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line321 +// CHECK-NEXT: line351 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8504,12 +8720,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8525,12 +8741,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8538,12 +8754,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8555,7 +8771,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8563,12 +8779,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col4 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8589,7 +8805,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line322 +// CHECK-NEXT: line352 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8601,7 +8817,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line330 +// CHECK-NEXT: line360 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8609,12 +8825,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line330 +// CHECK-NEXT: line360 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line330 +// CHECK-NEXT: line360 // CHECK-NEXT: col25 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8634,12 +8850,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line330 +// CHECK-NEXT: line360 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line330 +// CHECK-NEXT: line360 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8647,12 +8863,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col16 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8664,7 +8880,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8672,12 +8888,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col18 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col22 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8698,7 +8914,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line332 +// CHECK-NEXT: line362 // CHECK-NEXT: col3 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8710,7 +8926,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line338 +// CHECK-NEXT: line368 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8718,12 +8934,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line338 +// CHECK-NEXT: line368 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line338 +// CHECK-NEXT: line368 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8743,12 +8959,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line338 +// CHECK-NEXT: line368 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line338 +// CHECK-NEXT: line368 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8756,12 +8972,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line339 +// CHECK-NEXT: line369 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line339 +// CHECK-NEXT: line369 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8777,12 +8993,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line339 +// CHECK-NEXT: line369 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line339 +// CHECK-NEXT: line369 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8790,12 +9006,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8811,12 +9027,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8824,12 +9040,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8841,7 +9057,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8849,12 +9065,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col26 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8875,7 +9091,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash5 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line342 +// CHECK-NEXT: line372 // CHECK-NEXT: col24 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8891,12 +9107,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line358 +// CHECK-NEXT: line388 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line358 +// CHECK-NEXT: line388 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8904,12 +9120,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8921,7 +9137,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8929,12 +9145,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8954,12 +9170,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line359 +// CHECK-NEXT: line389 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8967,12 +9183,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -8988,12 +9204,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9001,12 +9217,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9018,7 +9234,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9026,12 +9242,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9052,7 +9268,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash3 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line360 +// CHECK-NEXT: line390 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9064,7 +9280,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9072,24 +9288,24 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col10 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col40 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9110,7 +9326,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col8 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9126,12 +9342,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line368 +// CHECK-NEXT: line398 // CHECK-NEXT: col7 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line368 +// CHECK-NEXT: line398 // CHECK-NEXT: col21 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9139,12 +9355,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9156,7 +9372,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9164,12 +9380,12 @@ void testCast(int coin) { // CHECK-NEXT: // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col40 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9189,12 +9405,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col14 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9202,12 +9418,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9223,12 +9439,12 @@ void testCast(int coin) { // CHECK-NEXT: start // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col5 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line369 +// CHECK-NEXT: line399 // CHECK-NEXT: col6 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9236,12 +9452,12 @@ void testCast(int coin) { // CHECK-NEXT: end // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line371 +// CHECK-NEXT: line401 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: // CHECK-NEXT: -// CHECK-NEXT: line371 +// CHECK-NEXT: line401 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9253,7 +9469,7 @@ void testCast(int coin) { // CHECK-NEXT: kindevent // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line371 +// CHECK-NEXT: line401 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: @@ -9272,7 +9488,7 @@ void testCast(int coin) { // CHECK-NEXT: issue_hash2 // CHECK-NEXT: location // CHECK-NEXT: -// CHECK-NEXT: line371 +// CHECK-NEXT: line401 // CHECK-NEXT: col9 // CHECK-NEXT: file0 // CHECK-NEXT: