1 | // RUN: %clang_cc1 -fsyntax-only -verify %s |
2 | |
3 | struct S |
4 | { |
5 | static int v1; // expected-note{{previous declaration is here}} |
6 | int v1; //expected-error{{duplicate member 'v1'}} |
7 | int v; //expected-note 2{{previous definition is here}} \ |
8 | // expected-note{{previous declaration is here}} |
9 | static int v; //expected-error{{redefinition of 'v' as different kind of symbol}} |
10 | int v; //expected-error{{duplicate member 'v'}} |
11 | static int v; //expected-error{{redefinition of 'v' as different kind of symbol}} |
12 | enum EnumT { E = 10 }; |
13 | friend struct M; |
14 | struct X; //expected-note{{forward declaration of 'S::X'}} |
15 | friend struct X; |
16 | }; |
17 | |
18 | S::EnumT Evar = S::E; // ok |
19 | S::EnumT Evar2 = EnumT(); //expected-error{{use of undeclared identifier 'EnumT'}} |
20 | S::M m; //expected-error{{no type named 'M' in 'S'}} |
21 | S::X x; //expected-error{{variable has incomplete type 'S::X'}} |
22 | |
23 | |
24 | struct S2 |
25 | { |
26 | static int v2; // expected-note{{previous declaration is here}} |
27 | static int v2; //expected-error{{duplicate member 'v2'}} |
28 | }; |
29 | |
30 | struct S3 |
31 | { |
32 | static int v3; |
33 | struct S4 |
34 | { |
35 | static int v3; |
36 | }; |
37 | }; |
38 | |
39 | struct S4 |
40 | { |
41 | static int v4; |
42 | }; |
43 | |
44 | int S4::v4; //expected-note{{previous definition is here}} |
45 | int S4::v4; //expected-error{{redefinition of 'v4'}} |
46 | |
47 | struct S5 |
48 | { |
49 | static int v5; //expected-note{{previous definition is here}} |
50 | void v5() { } //expected-error{{redefinition of 'v5' as different kind of symbol}} |
51 | |
52 | void v6() { } //expected-note{{previous definition is here}} |
53 | static int v6; //expected-error{{redefinition of 'v6' as different kind of symbol}} |
54 | |
55 | void v7() { } |
56 | void v7(int) { } //expected-note{{previous definition is here}} |
57 | static int v7; //expected-error{{redefinition of 'v7' as different kind of symbol}} |
58 | |
59 | void v8(); |
60 | int v8(int); //expected-note{{previous declaration is here}} |
61 | int v8; //expected-error{{duplicate member 'v8'}} |
62 | |
63 | |
64 | }; |
65 | |
66 | namespace PR8245 { |
67 | class X { |
68 | public: |
69 | template<class C> |
70 | class Inner { |
71 | public: |
72 | void foo(bool bar = true); |
73 | int bam; |
74 | }; |
75 | |
76 | Inner<int> _foo; |
77 | }; |
78 | |
79 | void f() { |
80 | X::Inner<int> c2i; |
81 | X::Inner<float> c2f; |
82 | c2i.foo(); |
83 | c2f.foo(); |
84 | } |
85 | |
86 | class Y { |
87 | class Inner { |
88 | void foo(int = sizeof(Y)); |
89 | }; |
90 | }; |
91 | } |
92 | |