1 // RUN: %clang_cc1 -Wno-gcc-compat -emit-llvm -o - %s | FileCheck %s
3 void pr8880_cg_1(int *iptr
) {
4 // CHECK-LABEL: define {{.*}}void @pr8880_cg_1(
6 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
7 for (i
= 2; i
!= 10 ; i
++ )
8 // CHECK: [[OUTER_COND]]
9 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
10 // CHECK: [[OUTER_BODY]]
11 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
12 for (j
= 3 ; j
< 22; (void)({ ++j
; break; j
;})) {
13 // CHECK: [[INNER_COND]]
14 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
15 // CHECK: [[INNER_BODY]]
17 // CHECK: store i32 7,
18 // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
19 // CHECK: [[INNER_INC]]
21 // break in 3rd expression of inner loop causes branch to end of inner loop
23 // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
24 // CHECK: [[INNER_END]]
26 // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
27 // CHECK: [[OUTER_INC]]
28 // CHECK: br label %[[OUTER_COND]]
29 // CHECK: [[OUTER_END]]
33 void pr8880_cg_2(int *iptr
) {
34 // CHECK-LABEL: define {{.*}}void @pr8880_cg_2(
36 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
37 for (i
= 2; i
!= 10 ; i
++ )
38 // CHECK: [[OUTER_COND]]
39 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
40 // CHECK: [[OUTER_BODY]]
41 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
42 for (j
= 3 ; j
< 22; (void)({ ++j
; continue; j
;})) {
43 // CHECK: [[INNER_COND]]
44 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
45 // CHECK: [[INNER_BODY]]
47 // CHECK: store i32 7,
48 // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
49 // CHECK: [[INNER_INC]]
51 // continue in 3rd expression of inner loop causes branch to inc of inner loop
53 // CHECK: br label %[[INNER_INC]]
54 // CHECK: [[INNER_END]]
56 // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
57 // CHECK: [[OUTER_INC]]
58 // CHECK: br label %[[OUTER_COND]]
59 // CHECK: [[OUTER_END]]
63 void pr8880_cg_3(int *iptr
) {
64 // CHECK-LABEL: define {{.*}}void @pr8880_cg_3(
66 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
67 for (i
= 2 ; i
!= 10 ; i
++ )
68 // CHECK: [[OUTER_COND]]
69 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
70 // CHECK: [[OUTER_BODY]]
71 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
72 for (j
= 3 ; ({break; j
;}); j
++) {
74 // break in 2nd expression of inner loop causes branch to end of inner loop
76 // CHECK: [[INNER_COND]]
77 // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
78 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
79 // CHECK: [[INNER_BODY]]
81 // CHECK: store i32 7,
82 // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
83 // CHECK: [[INNER_INC]]
84 // CHECK: br label %[[INNER_COND]]
86 // CHECK: [[INNER_END]]
87 // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
88 // CHECK: [[OUTER_INC]]
89 // CHECK: br label %[[OUTER_COND]]
90 // CHECK: [[OUTER_END]]
94 void pr8880_cg_4(int *iptr
) {
95 // CHECK-LABEL: define {{.*}}void @pr8880_cg_4(
97 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
98 for (i
= 2 ; i
!= 10 ; i
++ )
99 // CHECK: [[OUTER_COND]]
100 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
101 // CHECK: [[OUTER_BODY]]
102 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
103 for (j
= 3 ; ({continue; j
;}); j
++) {
105 // continue in 2nd expression of inner loop causes branch to inc of inner loop
107 // CHECK: [[INNER_COND]]
108 // CHECK: br label %[[INNER_INC:[0-9A-Za-z$._]+]]
109 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
110 // CHECK: [[INNER_BODY]]
112 // CHECK: store i32 7,
113 // CHECK: br label %[[INNER_INC]]
114 // CHECK: [[INNER_INC]]
115 // CHECK: br label %[[INNER_COND]]
117 // CHECK: [[INNER_END]]
118 // CHECK: br label %[[OUTER_INC:[0-9A-Za-z$._]+]]
119 // CHECK: [[OUTER_INC]]
120 // CHECK: br label %[[OUTER_COND]]
121 // CHECK: [[OUTER_END]]
125 void pr8880_cg_5(int x
, int *iptr
) {
126 // CHECK-LABEL: define {{.*}}void @pr8880_cg_5(
128 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
129 // CHECK: [[OUTER_COND]]
131 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
132 // CHECK: [[OUTER_BODY]]
133 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
134 while(({ break; --y
; })) {
135 // CHECK: [[INNER_COND]]
136 // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
137 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END:[0-9A-Za-z$._]+]]
138 // CHECK: [[INNER_BODY]]
140 // CHECK: store i32 7,
142 // CHECK: br label %[[INNER_COND]]
144 // CHECK: [[INNER_END]]
145 // CHECK: br label %[[OUTER_COND]]
146 // CHECK: [[OUTER_END]]
150 void pr8880_cg_6(int x
, int *iptr
) {
151 // CHECK-LABEL: define {{.*}}void @pr8880_cg_6(
153 // CHECK: br label %[[OUTER_COND:[0-9A-Za-z$._]+]]
154 // CHECK: [[OUTER_COND]]
156 // CHECK: label %[[OUTER_BODY:[0-9A-Za-z$._]+]], label %[[OUTER_END:[0-9A-Za-z$._]+]]
157 // CHECK: [[OUTER_BODY]]
158 // CHECK: br label %[[INNER_BODY:[0-9A-Za-z$._]+]]
159 // CHECK: [[INNER_BODY]]
161 // CHECK: store i32 7,
163 // CHECK: br label %[[INNER_COND:[0-9A-Za-z$._]+]]
164 } while(({ break; --y
; }));
165 // CHECK: [[INNER_COND]]
166 // CHECK: br label %[[INNER_END:[0-9A-Za-z$._]+]]
167 // CHECK: label %[[INNER_BODY:[0-9A-Za-z$._]+]], label %[[INNER_END]]
169 // CHECK: [[INNER_END]]
170 // CHECK: br label %[[OUTER_COND]]
171 // CHECK: [[OUTER_END]]