xref: /llvm-project/clang/test/Parser/decls.c (revision 5901d4005f015a46185ddc080038c1a3db3fa2c7)
1 // RUN: %clang_cc1 %s -fsyntax-only -verify -pedantic
2 
3 // Test that we can parse declarations at global scope.
4 int v;
5 
func(void)6 void func(void) {
7   // Test that we can parse declarations within a compound statement.
8   int a;
9   {
10     int b;
11   }
12 
13   int z = ({ // expected-warning {{use of GNU statement expression extension}}
14 	// Test that we can parse declarations within a GNU statement expression.
15 	int w = 12;
16 	w;
17   });
18 
19   // Test that we diagnose declarations where a statement is required.
20   // See GH92775.
21   if (1)
22     int x; // expected-error {{expected expression}}
23   for (;;)
24     int c; // expected-error {{expected expression}}
25 
26   label:
27     int y; // expected-warning {{label followed by a declaration is a C23 extension}}
28 
29   // Test that lookup works as expected.
30   (void)a;
31   (void)v;
32   (void)z;
33   (void)b; // expected-error {{use of undeclared identifier 'b'}}
34   (void)w; // expected-error {{use of undeclared identifier 'w'}}
35   (void)x; // expected-error {{use of undeclared identifier 'x'}}
36   (void)c; // expected-error {{use of undeclared identifier 'c'}}
37   (void)y;
38 }
39 
40