1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | int outer1; // expected-note{{previous definition is here}} |
4 | extern int outer2; // expected-note{{previous declaration is here}} |
5 | int outer4; |
6 | int outer4; // expected-note{{previous definition is here}} |
7 | int outer5; |
8 | int outer6(float); // expected-note{{previous definition is here}} |
9 | int outer7(float); |
10 | |
11 | void outer_test() { |
12 | extern float outer1; // expected-error{{redeclaration of 'outer1' with a different type}} |
13 | extern float outer2; // expected-error{{redeclaration of 'outer2' with a different type}} |
14 | extern float outer3; // expected-note{{previous declaration is here}} |
15 | double outer4; |
16 | extern int outer5; // expected-note{{previous declaration is here}} |
17 | extern int outer6; // expected-error{{redefinition of 'outer6' as different kind of symbol}} |
18 | int outer7; |
19 | extern int outer8; // expected-note{{previous definition is here}} |
20 | extern int outer9; |
21 | { |
22 | extern int outer9; // expected-note{{previous declaration is here}} |
23 | } |
24 | } |
25 | |
26 | int outer3; // expected-error{{redefinition of 'outer3' with a different type}} |
27 | float outer4; // expected-error{{redefinition of 'outer4' with a different type}} |
28 | float outer5; // expected-error{{redefinition of 'outer5' with a different type}} |
29 | int outer8(int); // expected-error{{redefinition of 'outer8' as different kind of symbol}} |
30 | float outer9; // expected-error{{redefinition of 'outer9' with a different type}} |
31 | |
32 | extern int outer13; // expected-note{{previous declaration is here}} |
33 | void outer_shadowing_test() { |
34 | extern int outer10; |
35 | extern int outer11; // expected-note{{previous declaration is here}} |
36 | extern int outer12; // expected-note{{previous declaration is here}} |
37 | { |
38 | float outer10; |
39 | float outer11; |
40 | float outer12; |
41 | { |
42 | extern int outer10; // okay |
43 | extern float outer11; // expected-error{{redeclaration of 'outer11' with a different type}} |
44 | static double outer12; |
45 | { |
46 | extern float outer12; // expected-error{{redeclaration of 'outer12' with a different type}} |
47 | extern float outer13; // expected-error{{redeclaration of 'outer13' with a different type}} |
48 | } |
49 | } |
50 | } |
51 | } |
52 | |
53 | void g18(void) { // expected-note{{'g18' declared here}} |
54 | extern int g19; |
55 | } |
56 | int *p=&g19; // expected-error{{use of undeclared identifier 'g19'}} \ |
57 | // expected-warning{{incompatible pointer types}} |
58 | |
59 | // PR3645 |
60 | static int a; |
61 | extern int a; // expected-note {{previous declaration is here}} |
62 | int a; // expected-error {{non-static declaration of 'a' follows static declaration}} |
63 | |
64 | void f(int x) { // expected-note {{previous definition is here}} |
65 | extern int x; // expected-error {{extern declaration of 'x' follows non-extern declaration}} |
66 | } |
67 | |
68 | extern int b[]; |
69 | void g20() { extern int b[3]; } // expected-note{{previous declaration is here}} |
70 | void g21() { extern int b[4]; } // expected-error{{redeclaration of 'b' with a different type: 'int [4]' vs 'int [3]'}} |
71 | |