]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/SemaCXX/class-base-member-init.cpp
Vendor import of clang release_34 branch r197841 (effectively, 3.4 RC3):
[FreeBSD/FreeBSD.git] / test / SemaCXX / class-base-member-init.cpp
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 }