diff clang/test/CodeGenCXX/union-dtor.cpp @ 150:1d019706d866

LLVM10
author anatofuz
date Thu, 13 Feb 2020 15:10:13 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clang/test/CodeGenCXX/union-dtor.cpp	Thu Feb 13 15:10:13 2020 +0900
@@ -0,0 +1,42 @@
+// RUN: %clang_cc1 -std=c++11 %s -S -o - -emit-llvm | FileCheck %s
+
+// PR10304: destructors should not call destructors for variant members.
+
+template<bool b = false>
+struct Foo {
+  Foo() { static_assert(b, "Foo::Foo used"); }
+  ~Foo() { static_assert(b, "Foo::~Foo used"); }
+};
+
+struct Bar {
+  Bar();
+  ~Bar();
+};
+
+union FooBar {
+  FooBar() {}
+  ~FooBar() {}
+  Foo<> foo;
+  Bar bar;
+};
+
+struct Variant {
+  Variant() {}
+  ~Variant() {}
+  union {
+    Foo<> foo;
+    Bar bar;
+  };
+};
+
+FooBar foobar;
+Variant variant;
+
+// The ctor and dtor of Foo<> and Bar should not be mentioned in the resulting
+// code.
+//
+// CHECK-NOT: 3FooILb1EEC1
+// CHECK-NOT: 3BarC1
+//
+// CHECK-NOT: 3FooILb1EED1
+// CHECK-NOT: 3BarD1