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