1334de520b0369215b7931fefa424fb92d295f0ebJames Dong// FIXME: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - -std=c++11 %s | FileCheck -check-prefix=CHECK %s 2334de520b0369215b7931fefa424fb92d295f0ebJames Dong// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - -std=c++11 %s | FileCheck -check-prefix=CHECK-ASSIGN %s 3334de520b0369215b7931fefa424fb92d295f0ebJames Dong// RUN: %clang_cc1 -emit-llvm -triple %itanium_abi_triple -o - -std=c++11 %s | FileCheck -check-prefix=CHECK-CTOR %s 4334de520b0369215b7931fefa424fb92d295f0ebJames Dong 5334de520b0369215b7931fefa424fb92d295f0ebJames Dong// construct 6334de520b0369215b7931fefa424fb92d295f0ebJames Dong 7334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct E { 8334de520b0369215b7931fefa424fb92d295f0ebJames Dong E(); 9334de520b0369215b7931fefa424fb92d295f0ebJames Dong E(E&&); 10334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 11334de520b0369215b7931fefa424fb92d295f0ebJames Dong 12334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct F { 13334de520b0369215b7931fefa424fb92d295f0ebJames Dong F(); 14334de520b0369215b7931fefa424fb92d295f0ebJames Dong F(F&&); 15334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 16334de520b0369215b7931fefa424fb92d295f0ebJames Dong 17334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct G { 18334de520b0369215b7931fefa424fb92d295f0ebJames Dong E e; 19a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar}; 20a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar 21334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct H : G { 22334de520b0369215b7931fefa424fb92d295f0ebJames Dong F l; 23334de520b0369215b7931fefa424fb92d295f0ebJames Dong E m; 24334de520b0369215b7931fefa424fb92d295f0ebJames Dong F ar[2]; 25334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 26334de520b0369215b7931fefa424fb92d295f0ebJames Dong 27a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnarvoid f() { 28334de520b0369215b7931fefa424fb92d295f0ebJames Dong H s; 29a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar // CHECK: call void @_ZN1HC1EOS_ 30a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar H t(static_cast<H&&>(s)); 31334de520b0369215b7931fefa424fb92d295f0ebJames Dong} 32334de520b0369215b7931fefa424fb92d295f0ebJames Dong 33334de520b0369215b7931fefa424fb92d295f0ebJames Dong 34334de520b0369215b7931fefa424fb92d295f0ebJames Dong// assign 35334de520b0369215b7931fefa424fb92d295f0ebJames Dong 36334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct A { 37a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar A &operator =(A&&); 38334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 39334de520b0369215b7931fefa424fb92d295f0ebJames Dong 40334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct B { 41a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar B &operator =(B&&); 42334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 43a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar 44334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct C { 45334de520b0369215b7931fefa424fb92d295f0ebJames Dong A a; 46334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 47334de520b0369215b7931fefa424fb92d295f0ebJames Dong 48334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct D : C { 49334de520b0369215b7931fefa424fb92d295f0ebJames Dong A a; 50334de520b0369215b7931fefa424fb92d295f0ebJames Dong B b; 51334de520b0369215b7931fefa424fb92d295f0ebJames Dong A ar[2]; 52334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 53334de520b0369215b7931fefa424fb92d295f0ebJames Dong 54334de520b0369215b7931fefa424fb92d295f0ebJames Dongvoid g() { 55334de520b0369215b7931fefa424fb92d295f0ebJames Dong D d; 56334de520b0369215b7931fefa424fb92d295f0ebJames Dong // CHECK: call {{.*}} @_ZN1DaSEOS_ 57334de520b0369215b7931fefa424fb92d295f0ebJames Dong d = D(); 58334de520b0369215b7931fefa424fb92d295f0ebJames Dong} 59334de520b0369215b7931fefa424fb92d295f0ebJames Dong 60334de520b0369215b7931fefa424fb92d295f0ebJames Dong// PR10822 61334de520b0369215b7931fefa424fb92d295f0ebJames Dongstruct I { 62334de520b0369215b7931fefa424fb92d295f0ebJames Dong unsigned var[1]; 63a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar}; 64334de520b0369215b7931fefa424fb92d295f0ebJames Dong 65334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK: define void @_Z1hv() nounwind { 66334de520b0369215b7931fefa424fb92d295f0ebJames Dongvoid h() { 67334de520b0369215b7931fefa424fb92d295f0ebJames Dong I i; 68334de520b0369215b7931fefa424fb92d295f0ebJames Dong // CHECK: call void @llvm.memcpy. 69334de520b0369215b7931fefa424fb92d295f0ebJames Dong i = I(); 70a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar // CHECK-NEXT: ret void 71a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar} 72a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar 73a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// PR10860 74a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnarstruct Empty { }; 75a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnarstruct VirtualWithEmptyBase : Empty { 76334de520b0369215b7931fefa424fb92d295f0ebJames Dong virtual void f(); 77334de520b0369215b7931fefa424fb92d295f0ebJames Dong}; 78334de520b0369215b7931fefa424fb92d295f0ebJames Dong 79334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK: define void @_Z25move_VirtualWithEmptyBaseR20VirtualWithEmptyBaseS0_ 80334de520b0369215b7931fefa424fb92d295f0ebJames Dongvoid move_VirtualWithEmptyBase(VirtualWithEmptyBase &x, VirtualWithEmptyBase &y) { 81334de520b0369215b7931fefa424fb92d295f0ebJames Dong // CHECK: call {{.*}} @_ZN20VirtualWithEmptyBaseaSEOS_ 82334de520b0369215b7931fefa424fb92d295f0ebJames Dong x = static_cast<VirtualWithEmptyBase&&>(y); 83334de520b0369215b7931fefa424fb92d295f0ebJames Dong // CHECK-NEXT: ret void 84334de520b0369215b7931fefa424fb92d295f0ebJames Dong} 85334de520b0369215b7931fefa424fb92d295f0ebJames Dong 86334de520b0369215b7931fefa424fb92d295f0ebJames Dong// move assignment ops 87334de520b0369215b7931fefa424fb92d295f0ebJames Dong 885195e0808bbc0438f076c1ca92d3c257d64b7ca1hkuang// CHECK-ASSIGN: define linkonce_odr {{.*}} @_ZN1DaSEOS_ 895195e0808bbc0438f076c1ca92d3c257d64b7ca1hkuang// CHECK-ASSIGN: call {{.*}} @_ZN1CaSEOS_ 90184077dee460d235c2f9ed3e6ecf9a6df06ae80cRachad// CHECK-ASSIGN: call {{.*}} @_ZN1AaSEOS_ 91a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-ASSIGN: call {{.*}} @_ZN1BaSEOS_ 92334de520b0369215b7931fefa424fb92d295f0ebJames Dong// array loop 93334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: br i1 94334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: call {{.*}} @_ZN1AaSEOS_ 95334de520b0369215b7931fefa424fb92d295f0ebJames Dong 96334de520b0369215b7931fefa424fb92d295f0ebJames Dong// VirtualWithEmptyBase move assignment operatpr 97334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: define linkonce_odr {{.*}} @_ZN20VirtualWithEmptyBaseaSEOS_ 98a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-ASSIGN: store 99a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-ASSIGN-NEXT: store 100a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-ASSIGN-NOT: call 101334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: ret 102334de520b0369215b7931fefa424fb92d295f0ebJames Dong 103334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: define linkonce_odr {{.*}} @_ZN1CaSEOS_ 104334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-ASSIGN: call {{.*}} @_ZN1AaSEOS_ 105334de520b0369215b7931fefa424fb92d295f0ebJames Dong 106a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// move ctors 107a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar 108a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-CTOR: define linkonce_odr {{.*}} @_ZN1HC2EOS_ 109a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-CTOR: call {{.*}} @_ZN1GC2EOS_ 110a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-CTOR: call {{.*}} @_ZN1FC1EOS_ 111a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-CTOR: call {{.*}} @_ZN1EC1EOS_ 112334de520b0369215b7931fefa424fb92d295f0ebJames Dong// array loop 113334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-CTOR: br i1 114334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-CTOR: call {{.*}} @_ZN1FC1EOS_ 115334de520b0369215b7931fefa424fb92d295f0ebJames Dong 116a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar// CHECK-CTOR: define linkonce_odr {{.*}} @_ZN1GC2EOS_ 117334de520b0369215b7931fefa424fb92d295f0ebJames Dong// CHECK-CTOR: call {{.*}} @_ZN1EC1EOS_ 118a1ae5a4fe52192525f510dc14ecf1f7d4fb107f5Lajos Molnar