xref: /minix3/external/bsd/llvm/dist/clang/test/CodeGenCXX/debug-info-line-if.cpp (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc // RUN: %clang_cc1 -g -std=c++11 -S -emit-llvm %s -o - | FileCheck %s
2*0a6a1f1dSLionel Sambuc // PR19864
3*0a6a1f1dSLionel Sambuc extern int v[2];
4*0a6a1f1dSLionel Sambuc int a = 0, b = 0;
main()5*0a6a1f1dSLionel Sambuc int main() {
6*0a6a1f1dSLionel Sambuc #line 100
7*0a6a1f1dSLionel Sambuc   for (int x : v)
8*0a6a1f1dSLionel Sambuc     if (x)
9*0a6a1f1dSLionel Sambuc       ++b; // CHECK: add nsw{{.*}}, 1
10*0a6a1f1dSLionel Sambuc     else
11*0a6a1f1dSLionel Sambuc       ++a; // CHECK: add nsw{{.*}}, 1
12*0a6a1f1dSLionel Sambuc   // The continuation block if the if statement should not share the
13*0a6a1f1dSLionel Sambuc   // location of the ++a statement. The branch back to the start of the loop
14*0a6a1f1dSLionel Sambuc   // should be attributed to the loop header line.
15*0a6a1f1dSLionel Sambuc 
16*0a6a1f1dSLionel Sambuc   // CHECK: br label
17*0a6a1f1dSLionel Sambuc   // CHECK: br label
18*0a6a1f1dSLionel Sambuc   // CHECK: br label {{.*}}, !dbg [[DBG1:!.*]]
19*0a6a1f1dSLionel Sambuc 
20*0a6a1f1dSLionel Sambuc #line 200
21*0a6a1f1dSLionel Sambuc   while (a)
22*0a6a1f1dSLionel Sambuc     if (b)
23*0a6a1f1dSLionel Sambuc       ++b; // CHECK: add nsw{{.*}}, 1
24*0a6a1f1dSLionel Sambuc     else
25*0a6a1f1dSLionel Sambuc       ++a; // CHECK: add nsw{{.*}}, 1
26*0a6a1f1dSLionel Sambuc 
27*0a6a1f1dSLionel Sambuc   // CHECK: br label
28*0a6a1f1dSLionel Sambuc   // CHECK: br label {{.*}}, !dbg [[DBG2:!.*]]
29*0a6a1f1dSLionel Sambuc 
30*0a6a1f1dSLionel Sambuc #line 300
31*0a6a1f1dSLionel Sambuc   for (; a; )
32*0a6a1f1dSLionel Sambuc     if (b)
33*0a6a1f1dSLionel Sambuc       ++b; // CHECK: add nsw{{.*}}, 1
34*0a6a1f1dSLionel Sambuc     else
35*0a6a1f1dSLionel Sambuc       ++a; // CHECK: add nsw{{.*}}, 1
36*0a6a1f1dSLionel Sambuc 
37*0a6a1f1dSLionel Sambuc   // CHECK: br label
38*0a6a1f1dSLionel Sambuc   // CHECK: br label {{.*}}, !dbg [[DBG3:!.*]]
39*0a6a1f1dSLionel Sambuc 
40*0a6a1f1dSLionel Sambuc #line 400
41*0a6a1f1dSLionel Sambuc   int x[] = {1, 2};
42*0a6a1f1dSLionel Sambuc   for (int y : x)
43*0a6a1f1dSLionel Sambuc     if (b)
44*0a6a1f1dSLionel Sambuc       ++b; // CHECK: add nsw{{.*}}, 1
45*0a6a1f1dSLionel Sambuc     else
46*0a6a1f1dSLionel Sambuc       ++a; // CHECK: add nsw{{.*}}, 1
47*0a6a1f1dSLionel Sambuc 
48*0a6a1f1dSLionel Sambuc   // CHECK: br label
49*0a6a1f1dSLionel Sambuc   // CHECK: br label {{.*}}, !dbg [[DBG4:!.*]]
50*0a6a1f1dSLionel Sambuc 
51*0a6a1f1dSLionel Sambuc   // CHECK: [[DBG1]] = !MDLocation(line: 100, scope: !{{.*}})
52*0a6a1f1dSLionel Sambuc   // CHECK: [[DBG2]] = !MDLocation(line: 200, scope: !{{.*}})
53*0a6a1f1dSLionel Sambuc   // CHECK: [[DBG3]] = !MDLocation(line: 300, scope: !{{.*}})
54*0a6a1f1dSLionel Sambuc   // CHECK: [[DBG4]] = !MDLocation(line: 401, scope: !{{.*}})
55*0a6a1f1dSLionel Sambuc }
56