diff options
Diffstat (limited to 'clang/test/CodeGen/nrvo-tracking.cpp')
-rw-r--r-- | clang/test/CodeGen/nrvo-tracking.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/clang/test/CodeGen/nrvo-tracking.cpp b/clang/test/CodeGen/nrvo-tracking.cpp index 2d6eb9efeca2..be405878f6f9 100644 --- a/clang/test/CodeGen/nrvo-tracking.cpp +++ b/clang/test/CodeGen/nrvo-tracking.cpp @@ -282,3 +282,40 @@ X t5() { } } // namespace test_alignas + +namespace PR51862 { + +template <class T> T test() { + T a; + T b; + if (0) + return a; + return b; +} + +struct A { + A(); + A(A &); + A(int); + operator int(); +}; + +// CHECK-LABEL: define{{.*}} void @_ZN7PR518624testINS_1AEEET_v +// CHECK: call i32 @_ZN7PR518621AcviEv +// CHECK-NEXT: call void @_ZN7PR518621AC1Ei +// CHECK-NEXT: call void @llvm.lifetime.end +template A test<A>(); + +struct BSub {}; +struct B : BSub { + B(); + B(B &); + B(const BSub &); +}; + +// CHECK-LABEL: define{{.*}} void @_ZN7PR518624testINS_1BEEET_v +// CHECK: call void @_ZN7PR518621BC1ERKNS_4BSubE +// CHECK-NEXT: call void @llvm.lifetime.end +template B test<B>(); + +} // namespace PR51862 |