diff --git a/lib/CodeGen/CGStmt.cpp b/lib/CodeGen/CGStmt.cpp index 970fdef17aa9fb6a075bcb5cbafb4641bba3655e..1395d60ab07d6251fdb9e79459fd70e4125bcf2a 100644 --- a/lib/CodeGen/CGStmt.cpp +++ b/lib/CodeGen/CGStmt.cpp @@ -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()); diff --git a/test/CodeGenCXX/debug-info-line-if.cpp b/test/CodeGenCXX/debug-info-line-if.cpp index 068e2a4a8c500803bb1a80ba1f254c433279e8fa..1ebe51cee5e1dcdfe95839f620811d568c37d474 100644 --- a/test/CodeGenCXX/debug-info-line-if.cpp +++ b/test/CodeGenCXX/debug-info-line-if.cpp @@ -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} }