1// RUN: %clang_cc1 -std=c++11 %s -S -o - -emit-llvm | FileCheck %s 2 3// PR10304: destructors should not call destructors for variant members. 4 5template<bool b = false> 6struct Foo { 7 Foo() { static_assert(b, "Foo::Foo used"); } 8 ~Foo() { static_assert(b, "Foo::~Foo used"); } 9}; 10 11struct Bar { 12 Bar(); 13 ~Bar(); 14}; 15 16union FooBar { 17 FooBar() {} 18 ~FooBar() {} 19 Foo<> foo; 20 Bar bar; 21}; 22 23struct Variant { 24 Variant() {} 25 ~Variant() {} 26 union { 27 Foo<> foo; 28 Bar bar; 29 }; 30}; 31 32FooBar foobar; 33Variant variant; 34 35// The ctor and dtor of Foo<> and Bar should not be mentioned in the resulting 36// code. 37// 38// CHECK-NOT: 3FooILb1EEC1 39// CHECK-NOT: 3BarC1 40// 41// CHECK-NOT: 3FooILb1EED1 42// CHECK-NOT: 3BarD1 43