Home | History | Annotate | Download | only in CodeGenCXX
      1 // RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-darwin10.0.0 -o - %s | FileCheck %s
      2 struct A {
      3   A &operator=(const A&);
      4   A &operator=(A&);
      5 };
      6 
      7 struct B {
      8   B &operator=(B&);
      9 };
     10 
     11 struct C {
     12   virtual C& operator=(const C&);
     13 };
     14 
     15 struct POD {
     16   int array[3][4];
     17 };
     18 
     19 struct CopyByValue {
     20   CopyByValue(const CopyByValue&);
     21   CopyByValue &operator=(CopyByValue);
     22 };
     23 
     24 struct D : A, B, virtual C {
     25   int scalar;
     26   int scalar_array[2][3];
     27   B class_member;
     28   C class_member_array[2][3];
     29   POD pod_array[2][3];
     30 
     31   union {
     32     int x;
     33     float f[3];
     34   };
     35 
     36   CopyByValue by_value;
     37 };
     38 
     39 void test_D(D d1, D d2) {
     40   d1 = d2;
     41 }
     42 
     43 // CHECK-LABEL: define linkonce_odr dereferenceable({{[0-9]+}}) %struct.D* @_ZN1DaSERS_
     44 // CHECK: {{call.*_ZN1AaSERS_}}
     45 // CHECK: {{call.*_ZN1BaSERS_}}
     46 // CHECK: {{call.*_ZN1CaSERKS_}}
     47 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 28}}
     48 // CHECK: {{call.*_ZN1BaSERS_}}
     49 // CHECK: br
     50 // CHECK: {{call.*_ZN1CaSERKS_}}
     51 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 288}}
     52 // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 12}}
     53 // CHECK: call void @_ZN11CopyByValueC1ERKS_
     54 // CHECK: {{call.*_ZN11CopyByValueaSES_}}
     55 // CHECK: ret
     56