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