Home | History | Annotate | Download | only in CodeGenCXX
      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