Home | History | Annotate | Download | only in CodeGenCXX
      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