forked from OSchip/llvm-project
DebugInfo: While loop backedge should be attribute to the start of the while statement.
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) llvm-svn: 215768
This commit is contained in:
parent
0ee846ff3c
commit
0c8e3f2fdd
|
@ -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());
|
||||
|
||||
|
|
|
@ -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}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue