diff options
Diffstat (limited to 'test/CodeGenCXX/debug-info-line-if.cpp')
-rw-r--r-- | test/CodeGenCXX/debug-info-line-if.cpp | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/test/CodeGenCXX/debug-info-line-if.cpp b/test/CodeGenCXX/debug-info-line-if.cpp index e14090f..d0205af 100644 --- a/test/CodeGenCXX/debug-info-line-if.cpp +++ b/test/CodeGenCXX/debug-info-line-if.cpp @@ -1,20 +1,55 @@ // 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. Having it point to the end of - // the condition is not ideal either, but it's less missleading. - - // CHECK: br label - // CHECK: br label - // CHECK: br label {{.*}}, !dbg ![[DBG:.*]] - // CHECK: ![[DBG]] = metadata !{i32 [[@LINE-11]], i32 0, metadata !{{.*}}, null} +#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 [[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:!.*]] + +#line 300 + for (; a; ) + if (b) + ++b; // CHECK: add nsw{{.*}}, 1 + else + ++a; // CHECK: add nsw{{.*}}, 1 + + // CHECK: br label + // CHECK: br label {{.*}}, !dbg [[DBG3:!.*]] + +#line 400 + int x[] = {1, 2}; + for (int y : x) + if (b) + ++b; // CHECK: add nsw{{.*}}, 1 + else + ++a; // CHECK: add nsw{{.*}}, 1 + + // CHECK: br label + // CHECK: br label {{.*}}, !dbg [[DBG4:!.*]] + + // CHECK: [[DBG1]] = !MDLocation(line: 100, scope: !{{.*}}) + // CHECK: [[DBG2]] = !MDLocation(line: 200, scope: !{{.*}}) + // CHECK: [[DBG3]] = !MDLocation(line: 300, scope: !{{.*}}) + // CHECK: [[DBG4]] = !MDLocation(line: 401, scope: !{{.*}}) } |