| // 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 |