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 {
DD9   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 
A()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 
BTest1::B34     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 {
ATest2::A41     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 
ATest3::A50     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 
A(char _)71     A(char _) : a(0), b(0) {}
A(short _)72     A(short _) : a(0), c(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}}
A(int _)73     A(int _) : d(0), e(0) {} // expected-error {{initializing multiple members of union}} expected-note {{previous initialization is here}}
A(long _)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 {
Atest5::A83     A() : decltype(Base(1))(3) {
84     }
Atest5::A85     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     }
Atest5::A89     A(float) : decltype(A())(3) {
90     }
91   };
92 }
93 
94 namespace rdar13185264 {
95   class X {
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 {};
Fetch()107   void Fetch() {
108     Apply(Bar());
109   }
110 }
111