d: Merge upstream dmd 568496d5b, druntime 178c44ff, phobos 574bf883b.
[official-gcc.git] / gcc / testsuite / gdc.test / compilable / test4375.d
blobf5c4e4a9b40278a34ce5d31f8df73714e1b5618e
1 // REQUIRED_ARGS: -unittest
2 // https://issues.dlang.org/show_bug.cgi?id=4375
3 // disallow dangling else
5 void main() {
7 if (true) {
8 if (false) {
9 assert(1);
10 } else {
11 assert(2);
16 if (true) {
17 if (false)
18 assert(7);
19 } else
20 assert(8);
23 if (true) {
24 if (false)
25 assert(9);
26 else
27 assert(10);
32 if (true)
33 assert(11);
34 else
35 assert(12);
40 label1:
41 if (true)
42 assert(13);
43 else
44 assert(14);
48 if (true)
49 foreach (i; 0 .. 5) {
50 if (true)
51 assert(17);
52 else
53 assert(18);
57 if (true) {
58 foreach (i; 0 .. 5)
59 if (true)
60 assert(18.1);
61 } else
62 assert(18.2);
65 if (true)
66 assert(19);
67 else
68 assert(20);
71 if (true)
72 assert(21);
73 else if (false)
74 assert(22);
75 else
76 assert(23);
79 version (A) {
80 if (true)
81 assert(26);
82 } else
83 assert(27);
86 version (A) {
87 if (true)
88 assert(28);
89 else
90 assert(29);
94 version (A)
95 assert(30);
96 else version (B)
97 assert(31);
98 else
99 assert(32);
102 static if (true) {
103 static if (true)
104 assert(35);
105 } else
106 assert(36);
109 static if (true) {
110 static if (true)
111 assert(37);
112 else
113 assert(38);
117 static if (true)
118 assert(39);
119 else static if (true)
120 assert(40);
121 else
122 assert(41);
124 switch (4) {
125 case 0:
126 if (true)
127 assert(42);
128 else
129 assert(43);
130 break;
131 case 1: .. case 5:
132 if (true)
133 assert(44);
134 else
135 assert(45);
136 break;
137 default:
138 if (true)
139 assert(46);
140 else
141 assert(47);
142 break;
145 // (o_O)
146 switch (1)
147 default:
148 if (true)
149 assert(113);
150 else
151 assert(114);
153 // (o_O)
154 final switch (1)
155 case 1:
156 if (true)
157 assert(117);
158 else
159 assert(118);
161 mixin(q{
162 if (true)
163 assert(56);
164 else
165 assert(57);
170 while (false)
171 if (true)
172 assert(66);
173 else
174 assert(67);
177 if (true)
178 while (false)
179 assert(68);
180 else
181 assert(69);
185 if (true)
186 assert(72);
187 else
188 assert(73);
189 while (false);
192 if (true)
194 if (true)
195 assert(74);
196 else
197 assert(75);
198 while (false);
200 for (
201 if (true) // (o_O)
202 assert(78);
203 else
204 assert(79);
205 false; false
207 if (true)
208 assert(80);
209 else
210 assert(81);
212 if (true)
213 for (if (true) assert(84); else assert(85); false;)
214 assert(86);
217 if (true)
218 if (true)
219 if (true)
220 if (true)
221 if (true)
222 assert(87);
224 auto x = new C;
227 if (true)
228 while (false)
229 for (;;)
230 scope (exit)
231 synchronized (x)
232 assert(88);
233 else
234 assert(89);
237 if (true)
238 while (false)
239 for (;;) {
240 scope (exit)
241 synchronized (x)
242 if (true)
243 assert(90);
244 else
245 assert(89);
249 if (true)
250 while (false)
251 for (;;)
252 scope (exit)
253 synchronized (x)
254 if (true)
255 assert(90);
256 else
257 assert(89);
258 else
259 assert(12);
262 with (x)
263 if (false)
264 assert(92);
265 else
266 assert(93);
270 if (true)
271 assert(94);
272 else
273 assert(95);
274 catch (Exception e)
275 if (true)
276 assert(96);
277 else
278 assert(97);
279 finally
280 if (true)
281 assert(98);
282 else
283 assert(99);
286 if (true)
288 if (true)
289 assert(100);
290 else
291 assert(101);
292 finally
293 assert(102);
295 if (true)
297 assert(109);
298 catch(Exception e)
299 if (true)
300 assert(110);
301 else
302 assert(112);
303 finally
304 assert(111);
306 static struct F {
307 static if (true)
308 int x;
309 else
310 int y;
312 static if (true) {
313 static if (false)
314 int z;
315 } else
316 int w;
318 static if (true)
319 int t;
320 else static if (false)
321 int u;
322 else
323 int v;
326 if (true)
327 if (true)
328 assert(113);
329 else
330 assert(114);
331 else
332 assert(115);
334 static if (true)
335 static if (true)
336 assert(116);
337 else
338 assert(117);
339 else
340 assert(118);
344 unittest {
345 if (true)
346 assert(50);
347 else
348 assert(51);
351 class C {
352 invariant() {
353 if (true)
354 assert(58);
355 else
356 assert(59);
359 int f()
360 in {
361 if (true)
362 assert(60);
363 else
364 assert(61);
366 out(res) {
367 if (true)
368 assert(62);
369 else
370 assert(63);
372 do {
373 if (true)
374 assert(64);
375 else
376 assert(65);
377 return 0;
381 enum q = q{
382 if(true)
383 if(true)
384 assert(54.1);
385 else
386 assert(55.2);
389 static if (true)
390 struct F0 {}
391 else static if (true)
392 struct F1 {}
393 else
394 struct F2 {}
396 static if (true) {
397 static if (false)
398 struct F3 {}
399 } else
400 struct F4 {}
402 version(A) {
403 version(B)
404 struct F5 {}
405 } else
406 struct F6 {}
408 version(A) {
409 version(B)
410 struct F5a {}
411 else
412 struct F5b {}
415 version (C)
416 struct F5c {}
417 else
418 struct F5d {}
420 struct F7 {
421 static if (true)
422 int x;
423 else
424 float x;
426 private:
427 static if (true)
428 int y;
429 else
430 float y;
433 template F8() {
434 static if (true)
435 int x;
436 else
437 float x;
440 static if (true)
441 align(1)
442 static if (false)
443 struct F9 {}
445 static if (true)
446 align(1) {
447 extern(C)
448 pure
449 static if (false)
450 void F10(){}
451 else
452 void F11(){}
456 void f() {
457 int[] x;
458 static if (5 > 0)
459 version (Y)
460 scope (failure)
461 foreach (i, e; x)
462 while (i > 20)
463 with (e)
464 if (e < 0)
465 synchronized(e)
466 assert(1);
467 else
468 assert(2);
469 else
470 x = null;
471 else
472 x = null;