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