summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/nrvo-tracking.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test/CodeGen/nrvo-tracking.cpp')
-rw-r--r--clang/test/CodeGen/nrvo-tracking.cpp37
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