]> granicus.if.org Git - clang/commitdiff
DebugInfo: While loop backedge should be attribute to the start of the while statement.
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 15 Aug 2014 21:11:25 +0000 (21:11 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 15 Aug 2014 21:11:25 +0000 (21:11 +0000)
A little test case simplification - this could be simplified further,
though there are certainly interesting connections to the if/else
construct so I'm hesitant to remove that entirely though it does appear
somewhat unrelated.

(similar fix to r215766, related to PR19864)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215768 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGStmt.cpp
test/CodeGenCXX/debug-info-line-if.cpp

index 970fdef17aa9fb6a075bcb5cbafb4641bba3655e..1395d60ab07d6251fdb9e79459fd70e4125bcf2a 100644 (file)
@@ -730,6 +730,7 @@ void CodeGenFunction::EmitWhileStmt(const WhileStmt &S,
   // Immediately force cleanup.
   ConditionScope.ForceCleanup();
 
+  EmitStopPoint(&S);
   // Branch to the loop header again.
   EmitBranch(LoopHeader.getBlock());
 
index 068e2a4a8c500803bb1a80ba1f254c433279e8fa..1ebe51cee5e1dcdfe95839f620811d568c37d474 100644 (file)
@@ -1,20 +1,31 @@
 // RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s
 // PR19864
+extern int v[2];
+int a = 0, b = 0;
 int main() {
-    int v[] = {13, 21, 8, 3, 34, 1, 5, 2};
-    int a = 0, b = 0;
-    for (int x : v)
-      if (x >= 3)
-        ++b;     // CHECK: add nsw{{.*}}, 1
-      else if (x >= 0)
-        ++a;    // CHECK: add nsw{{.*}}, 1
-    // The continuation block if the if statement should not share the
-    // location of the ++a statement. The branch back to the start of the loop
-    // should be attributed to the loop header line.
+#line 100
+  for (int x : v)
+    if (x)
+      ++b; // CHECK: add nsw{{.*}}, 1
+    else
+      ++a; // CHECK: add nsw{{.*}}, 1
+  // The continuation block if the if statement should not share the
+  // location of the ++a statement. The branch back to the start of the loop
+  // should be attributed to the loop header line.
 
-    // CHECK: br label
-    // CHECK: br label
-    // CHECK: br label {{.*}}, !dbg ![[DBG:.*]]
-    // CHECK: ![[DBG]] = metadata !{i32 [[@LINE-12]], i32 0, metadata !{{.*}}, null}
+  // CHECK: br label
+  // CHECK: br label
+  // CHECK: br label {{.*}}, !dbg [[DBG1:!.*]]
 
+#line 200
+  while (a)
+    if (b)
+      ++b; // CHECK: add nsw{{.*}}, 1
+    else
+      ++a; // CHECK: add nsw{{.*}}, 1
+
+  // CHECK: br label
+  // CHECK: br label {{.*}}, !dbg [[DBG2:!.*]]
+  // CHECK: [[DBG1]] = metadata !{i32 100, i32 0, metadata !{{.*}}, null}
+  // CHECK: [[DBG2]] = metadata !{i32 200, i32 0, metadata !{{.*}}, null}
 }