| // RUN: %clang_cc1 -fobjc-gc -emit-llvm -triple x86_64-apple-darwin10.0.0 -fobjc-fragile-abi -o - %s | FileCheck %s | 
 | struct A {  | 
 |   A &operator=(const A&); | 
 |   A &operator=(A&); | 
 | }; | 
 |  | 
 | struct B { | 
 |   B &operator=(B&); | 
 | }; | 
 |  | 
 | struct C { | 
 |   virtual C& operator=(const C&); | 
 | }; | 
 |  | 
 | struct POD { | 
 |   id myobjc; | 
 |   int array[3][4]; | 
 | }; | 
 |  | 
 | struct CopyByValue { | 
 |   CopyByValue(const CopyByValue&); | 
 |   CopyByValue &operator=(CopyByValue); | 
 | }; | 
 |  | 
 | struct D : A, B, virtual C {  | 
 |   int scalar; | 
 |   int scalar_array[2][3]; | 
 |   B class_member; | 
 |   C class_member_array[2][3]; | 
 |   POD pod_array[2][3]; | 
 |  | 
 |   union { | 
 |     int x; | 
 |     float f[3]; | 
 |   }; | 
 |  | 
 |   CopyByValue by_value; | 
 | }; | 
 |  | 
 | void test_D(D d1, D d2) { | 
 |   d1 = d2; | 
 | } | 
 |  | 
 | // CHECK: define linkonce_odr %struct.D* @_ZN1DaSERS_ | 
 | // CHECK: {{call.*_ZN1AaSERS_}} | 
 | // CHECK: {{call.*_ZN1BaSERS_}} | 
 | // CHECK: {{call.*_ZN1CaSERKS_}} | 
 | // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 24}} | 
 | // CHECK: {{call.*_ZN1BaSERS_}} | 
 | // CHECK: br | 
 | // CHECK: {{call.*_ZN1CaSERKS_}} | 
 | // CHECK: {{call.*@objc_memmove_collectable}} | 
 | // CHECK: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 12}} | 
 | // CHECK: call void @_ZN11CopyByValueC1ERKS_ | 
 | // CHECK: {{call.*_ZN11CopyByValueaSES_}} | 
 | // CHECK: ret | 
 |  |