1762bb9d0ad20320b9f97a841dce57ba5e8e48b07Richard Smith// RUN: %clang_cc1 -std=c++11 %s -S -o - -emit-llvm | FileCheck %s 2416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 3416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// PR10304: destructors should not call destructors for variant members. 4416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 5416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smithtemplate<bool b = false> 6416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smithstruct Foo { 7416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Foo() { static_assert(b, "Foo::Foo used"); } 8416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith ~Foo() { static_assert(b, "Foo::~Foo used"); } 9416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith}; 10416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 11416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smithstruct Bar { 12416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Bar(); 13416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith ~Bar(); 14416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith}; 15416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 16416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smithunion FooBar { 17416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith FooBar() {} 18416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith ~FooBar() {} 19416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Foo<> foo; 20416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Bar bar; 21416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith}; 22416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 23416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smithstruct Variant { 24416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Variant() {} 25416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith ~Variant() {} 26416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith union { 27416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Foo<> foo; 28416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith Bar bar; 29416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith }; 30416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith}; 31416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 32416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard SmithFooBar foobar; 33416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard SmithVariant variant; 34416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith 35416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// The ctor and dtor of Foo<> and Bar should not be mentioned in the resulting 36416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// code. 37416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// 38416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// CHECK-NOT: 3FooILb1EEC1 39416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// CHECK-NOT: 3BarC1 40416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// 41416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// CHECK-NOT: 3FooILb1EED1 42416f63e42d4c34a38833a3aa8fa1ebb3c847722bRichard Smith// CHECK-NOT: 3BarD1 43