1 // RUN: %clang_cc1 -std=c++98 -triple i386-unknown-unknown -fno-elide-constructors -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX98 2 // RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown -fno-elide-constructors -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX11 3 // RUN: %clang_cc1 -std=c++98 -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX98-ELIDE 4 // RUN: %clang_cc1 -std=c++11 -triple i386-unknown-unknown -emit-llvm -o - %s | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-CXX11-ELIDE 5 6 // Reduced from PR12208 7 class X { 8 public: 9 X(); 10 X(const X&); 11 #if __cplusplus >= 201103L 12 X(X&&); 13 #endif 14 ~X(); 15 }; 16 17 // CHECK-LABEL: define void @_Z4Testv( 18 X Test() 19 { 20 X x; 21 22 // Check that the copy constructor for X is called with result variable as 23 // sret argument. 24 // CHECK-CXX98: call void @_ZN1XC1ERKS_( 25 // CHECK-CXX11: call void @_ZN1XC1EOS_( 26 // CHECK-CXX98-ELIDE-NOT: call void @_ZN1XC1ERKS_( 27 // CHECK-CXX11-ELIDE-NOT: call void @_ZN1XC1EOS_( 28 29 // Make sure that the destructor for X is called. 30 // FIXME: This call is present even in the -ELIDE runs, but is guarded by a 31 // branch that is never taken in those cases. We could generate better IR 32 // here. 33 // CHECK: call void @_ZN1XD1Ev( 34 return x; 35 } 36