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