Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10 -emit-llvm -o - %s | FileCheck %s
      2 
      3 struct A {
      4   A();
      5   A(const A&);
      6   A(A&);
      7   ~A();
      8 };
      9 
     10 struct B {
     11   B();
     12   B(B&);
     13 };
     14 
     15 struct C {
     16   C() {}
     17   C(C& other, A a = A());
     18   int i, j;
     19 };
     20 
     21 struct POD {
     22   int array[3][4];
     23 };
     24 
     25 struct D : A, B, virtual C {
     26   D();
     27   int scalar;
     28   int scalar_array[2][3];
     29   B class_member;
     30   C class_member_array[2][3];
     31   POD pod_array[2][3];
     32 
     33   union {
     34     int x;
     35     float f[3];
     36   };
     37 };
     38 
     39 void f(D d) {
     40   D d2(d);
     41 }
     42 
     43 // CHECK: define linkonce_odr void @_ZN1DC1ERS_(%struct.D* %this, %struct.D*) unnamed_addr
     44 // CHECK: call void @_ZN1AC1Ev
     45 // CHECK: call void @_ZN1CC2ERS_1A
     46 // CHECK: call void @_ZN1AD1Ev
     47 // CHECK: call void @_ZN1AC2ERS_
     48 // CHECK: call void @_ZN1BC2ERS_
     49 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 24}}
     50 // CHECK: call void @_ZN1BC1ERS_
     51 // CHECK: br
     52 // CHECK: {{icmp ult.*, 2}}
     53 // CHECK: {{icmp ult.*, 3}}
     54 // CHECK: call void @_ZN1AC1Ev
     55 // CHECK: call void @_ZN1CC1ERS_1A
     56 // CHECK: call void @_ZN1AD1Ev
     57 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 288}}
     58 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 12}}
     59 // CHECK: ret void
     60 
     61 
     62 template<class T> struct X0 { void f0(T * ) { } };
     63 template <class > struct X1 { X1( X1& , int = 0 ) { } };
     64 struct X2 { X1<int> result; };
     65 void test_X2()
     66 {
     67   typedef X2 impl;
     68   typedef X0<impl> pimpl;
     69   impl* i;
     70   pimpl pdata;
     71   pdata.f0( new impl(*i));
     72 }
     73 
     74 // rdar://problem/9598341
     75 namespace test3 {
     76   struct A { A(const A&); A&operator=(const A&); };
     77   struct B { A a; unsigned : 0; };
     78   void test(const B &x) {
     79     B y = x;
     80     y = x;
     81   }
     82 }
     83