1*67e74705SXin Li // RUN: %clang_cc1 %s -std=c++11 -emit-llvm -o - -triple=i686-linux-gnu | FileCheck %s 2*67e74705SXin Li 3*67e74705SXin Li struct A { 4*67e74705SXin Li A(const A&); 5*67e74705SXin Li A &operator=(const A&); 6*67e74705SXin Li }; 7*67e74705SXin Li 8*67e74705SXin Li struct B { 9*67e74705SXin Li A a; 10*67e74705SXin Li B(B&&) = default; 11*67e74705SXin Li B &operator=(B&&) = default; 12*67e74705SXin Li }; 13*67e74705SXin Li 14*67e74705SXin Li // CHECK: define {{.*}} @_Z2f1 f1(B & x)15*67e74705SXin Livoid f1(B &x) { 16*67e74705SXin Li // CHECK-NOT: memcpy 17*67e74705SXin Li // CHECK: call {{.*}} @_ZN1BC1EOS_( 18*67e74705SXin Li B b(static_cast<B&&>(x)); 19*67e74705SXin Li } 20*67e74705SXin Li 21*67e74705SXin Li // CHECK: define {{.*}} @_Z2f2 f2(B & x,B & y)22*67e74705SXin Livoid f2(B &x, B &y) { 23*67e74705SXin Li // CHECK-NOT: memcpy 24*67e74705SXin Li // CHECK: call {{.*}} @_ZN1BaSEOS_( 25*67e74705SXin Li x = static_cast<B&&>(y); 26*67e74705SXin Li } 27*67e74705SXin Li 28*67e74705SXin Li // CHECK: define {{.*}} @_ZN1BaSEOS_( 29*67e74705SXin Li // CHECK: call {{.*}} @_ZN1AaSERKS_( 30*67e74705SXin Li 31*67e74705SXin Li // rdar://18309639 { 32*67e74705SXin Li template<int> struct C { C() = default; }; 33*67e74705SXin Li struct D { 34*67e74705SXin Li C<0> c; DD35*67e74705SXin Li D() { } 36*67e74705SXin Li }; 37*67e74705SXin Li template struct C<0>; // was asserting f3()38*67e74705SXin Livoid f3() { 39*67e74705SXin Li C<0> a; 40*67e74705SXin Li D b; 41*67e74705SXin Li } 42*67e74705SXin Li // CHECK: define {{.*}} @_ZN1CILi0EEC1Ev 43*67e74705SXin Li // CHECK: define {{.*}} @_ZN1DC1Ev 44*67e74705SXin Li 45*67e74705SXin Li // CHECK: define {{.*}} @_ZN1BC2EOS_( 46*67e74705SXin Li // CHECK: call {{.*}} @_ZN1AC1ERKS_( 47