1 // RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 -mconstructor-aliases | FileCheck %s 2 3 struct A { 4 A(); 5 }; 6 7 // CHECK: @_ZN1AC1Ev = alias {{.*}} @_ZN1AC2Ev 8 // CHECK-LABEL: define void @_ZN1AC2Ev(%struct.A* %this) unnamed_addr 9 A::A() { } 10 11 struct B : virtual A { 12 B(); 13 }; 14 15 // CHECK-LABEL: define void @_ZN1BC2Ev(%struct.B* %this, i8** %vtt) unnamed_addr 16 // CHECK-LABEL: define void @_ZN1BC1Ev(%struct.B* %this) unnamed_addr 17 B::B() { } 18 19 struct C : virtual A { 20 C(bool); 21 }; 22 23 // CHECK-LABEL: define void @_ZN1CC2Eb(%struct.C* %this, i8** %vtt, i1 zeroext) unnamed_addr 24 // CHECK-LABEL: define void @_ZN1CC1Eb(%struct.C* %this, i1 zeroext) unnamed_addr 25 C::C(bool) { } 26 27 // PR6251 28 namespace PR6251 { 29 30 // Test that we don't call the A<char> constructor twice. 31 32 template<typename T> 33 struct A { A(); }; 34 35 struct B : virtual A<char> { }; 36 struct C : virtual A<char> { }; 37 38 struct D : B, C { 39 D(); 40 }; 41 42 // CHECK-LABEL: define void @_ZN6PR62511DC1Ev(%"struct.PR6251::D"* %this) unnamed_addr 43 // CHECK: call void @_ZN6PR62511AIcEC2Ev 44 // CHECK-NOT: call void @_ZN6PR62511AIcEC2Ev 45 // CHECK: ret void 46 D::D() { } 47 48 } 49