1 | // RUN: %clang_cc1 -fsyntax-only -std=c++11 -verify %s |
2 | |
3 | class S { |
4 | public: |
5 | S (); |
6 | }; |
7 | |
8 | struct D : S { |
9 | D() : |
10 | b1(0), // expected-note {{previous initialization is here}} |
11 | b2(1), |
12 | b1(0), // expected-error {{multiple initializations given for non-static member 'b1'}} |
13 | S(), // expected-note {{previous initialization is here}} |
14 | S() // expected-error {{multiple initializations given for base 'S'}} |
15 | {} |
16 | int b1; |
17 | int b2; |
18 | }; |
19 | |
20 | struct A { |
21 | struct { |
22 | int a; |
23 | int b; |
24 | }; |
25 | A(); |
26 | }; |
27 | |
28 | A::A() : a(10), b(20) { } |
29 | |
30 | namespace Test1 { |
31 | template<typename T> struct A {}; |
32 | template<typename T> struct B : A<T> { |
33 | |
34 | B() : A<T>(), // expected-note {{previous initialization is here}} |
35 | A<T>() { } // expected-error {{multiple initializations given for base 'A<T>'}} |
36 | }; |
37 | } |
38 | |
39 | namespace Test2 { |
40 | template<typename T> struct A : T { |
41 | A() : T(), // expected-note {{previous initialization is here}} |
42 | T() { } // expected-error {{multiple initializations given for base 'T'}} |
43 | }; |
44 | } |
45 | |
46 | namespace Test3 { |
47 | template<typename T> struct A { |
48 | T t; |
49 | |
50 | A() : t(1), // expected-note {{previous initialization is here}} |
51 | t(2) { } // expected-error {{multiple initializations given for non-static member 't'}} |
52 | }; |
53 | } |
54 | |
55 | namespace test4 { |
56 | class A { |
57 | union { |
58 | struct { |
59 | int a; |
60 | int b; |
61 | }; |
62 | |
63 | int c; |
64 | |
65 | union { |
66 | int d; |
67 | int e; |
68 | }; |
69 | }; |
70 | |
71 | A(char _) : a(0), b(0) {} |
72 | A(short _) : a(0), c(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} |
73 | A(int _) : d(0), e(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} |
74 | A(long _) : a(0), d(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}} |
75 | }; |
76 | } |
77 | |
78 | namespace test5 { |
79 | struct Base { |
80 | Base(int); |
81 | }; |
82 | struct A : Base { |
83 | A() : decltype(Base(1))(3) { |
84 | } |
85 | A(int) : Base(3), // expected-note {{previous initialization is here}} |
86 | decltype(Base(1))(2), // expected-error {{multiple initializations given for base 'decltype(test5::Base(1))' (aka 'test5::Base')}} |
87 | decltype(int())() { // expected-error {{constructor initializer 'decltype(int())' (aka 'int') does not name a class}} |
88 | } |
89 | A(float) : decltype(A())(3) { |
90 | } |
91 | }; |
92 | } |
93 | |
94 | namespace rdar13185264 { |
95 | class X { |
96 | X() : a(), // expected-note{{previous initialization is here}} |
97 | a() { } // expected-error{{multiple initializations given for non-static member 'a'}} |
98 | union { void *a; }; |
99 | }; |
100 | } |
101 | |
102 | namespace PR16596 { |
103 | class A { public: virtual ~A(); }; |
104 | typedef const A Foo; |
105 | void Apply(Foo processor); |
106 | struct Bar : public Foo {}; |
107 | void Fetch() { |
108 | Apply(Bar()); |
109 | } |
110 | } |
111 | |