xref: /aosp_15_r20/external/clang/test/Parser/statements.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s -Wno-unreachable-code
2*67e74705SXin Li 
test1()3*67e74705SXin Li void test1() {
4*67e74705SXin Li   { ; {  ;;}} ;;
5*67e74705SXin Li }
6*67e74705SXin Li 
test2()7*67e74705SXin Li void test2() {
8*67e74705SXin Li   if (0) { if (1) {} } else { }
9*67e74705SXin Li 
10*67e74705SXin Li   do { } while (0);
11*67e74705SXin Li 
12*67e74705SXin Li   while (0) while(0) do ; while(0);
13*67e74705SXin Li 
14*67e74705SXin Li   for ((void)0;0;(void)0)
15*67e74705SXin Li     for (;;)
16*67e74705SXin Li       for ((void)9;0;(void)2)
17*67e74705SXin Li         ;
18*67e74705SXin Li   for (int X = 0; 0; (void)0);
19*67e74705SXin Li }
20*67e74705SXin Li 
test3()21*67e74705SXin Li void test3() {
22*67e74705SXin Li     switch (0) {
23*67e74705SXin Li 
24*67e74705SXin Li     case 4:
25*67e74705SXin Li       if (0) {
26*67e74705SXin Li     case 6: ;
27*67e74705SXin Li       }
28*67e74705SXin Li     default:
29*67e74705SXin Li       ;
30*67e74705SXin Li   }
31*67e74705SXin Li }
32*67e74705SXin Li 
test4()33*67e74705SXin Li void test4() {
34*67e74705SXin Li   if (0);  // expected-warning {{if statement has empty body}} expected-note {{put the semicolon on a separate line to silence this warning}}
35*67e74705SXin Li 
36*67e74705SXin Li   int X;  // declaration in a block.
37*67e74705SXin Li 
38*67e74705SXin Li foo:  if (0); // expected-warning {{if statement has empty body}} expected-note {{put the semicolon on a separate line to silence this warning}}
39*67e74705SXin Li }
40*67e74705SXin Li 
41*67e74705SXin Li typedef int t;
test5()42*67e74705SXin Li void test5() {
43*67e74705SXin Li   if (0);   // expected-warning {{if statement has empty body}} expected-note {{put the semicolon on a separate line to silence this warning}}
44*67e74705SXin Li 
45*67e74705SXin Li   t x = 0;
46*67e74705SXin Li 
47*67e74705SXin Li   if (0);  // expected-warning {{if statement has empty body}} expected-note {{put the semicolon on a separate line to silence this warning}}
48*67e74705SXin Li }
49*67e74705SXin Li 
50*67e74705SXin Li 
test6(void)51*67e74705SXin Li void test6(void) {
52*67e74705SXin Li   do
53*67e74705SXin Li     .           // expected-error {{expected expression}}
54*67e74705SXin Li    while (0);
55*67e74705SXin Li }
56*67e74705SXin Li 
test7()57*67e74705SXin Li int test7() {
58*67e74705SXin Li   return 4     // expected-error {{expected ';' after return statement}}
59*67e74705SXin Li }
60*67e74705SXin Li 
61*67e74705SXin Li void test8() {
62*67e74705SXin Li   // Should not skip '}' and produce a "expected '}'" error.
63*67e74705SXin Li   undecl // expected-error {{use of undeclared identifier 'undecl'}}
64*67e74705SXin Li }
65*67e74705SXin Li 
66*67e74705SXin Li int test9() {
67*67e74705SXin Li   int T[] = {1, 2, };
68*67e74705SXin Li 
69*67e74705SXin Li   int X;
70*67e74705SXin Li   X = 0, // expected-error {{expected ';' after expression}}
71*67e74705SXin Li     {
72*67e74705SXin Li     }
73*67e74705SXin Li 
74*67e74705SXin Li   X = 0, // expected-error {{expected ';' after expression}}
75*67e74705SXin Li   if (0)
76*67e74705SXin Li     ;
77*67e74705SXin Li 
78*67e74705SXin Li   return 4, // expected-error {{expected ';' after return statement}}
79*67e74705SXin Li }
80