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