xref: /llvm-project/clang/test/CodeGenCXX/devirtualize-dtor-final.cpp (revision fd739804e0591468762eb87488a497a3f7d4afb0)
1cb30590dSHiroshi Yamauchi // RUN: %clang_cc1 -triple i386-unknown-unknown -std=c++11 %s -emit-llvm -o - | FileCheck %s
2cb30590dSHiroshi Yamauchi 
3cb30590dSHiroshi Yamauchi namespace Test1 {
~ATest1::A4cb30590dSHiroshi Yamauchi   struct A { virtual ~A() {} };
5cb30590dSHiroshi Yamauchi   struct B final : A {};
~CTest1::C6cb30590dSHiroshi Yamauchi   struct C : A { virtual ~C() final {} };
7cb30590dSHiroshi Yamauchi   struct D { virtual ~D() final = 0; };
8*fd739804SFangrui Song   // CHECK-LABEL: define{{.*}} void @_ZN5Test13fooEPNS_1BE
foo(B * b)9cb30590dSHiroshi Yamauchi   void foo(B *b) {
10cb30590dSHiroshi Yamauchi     // CHECK: call void @_ZN5Test11BD1Ev
11cb30590dSHiroshi Yamauchi     delete b;
12cb30590dSHiroshi Yamauchi   }
13*fd739804SFangrui Song   // CHECK-LABEL: define{{.*}} void @_ZN5Test14foo2EPNS_1CE
foo2(C * c)14cb30590dSHiroshi Yamauchi   void foo2(C *c) {
15cb30590dSHiroshi Yamauchi     // CHECK: call void @_ZN5Test11CD1Ev
16cb30590dSHiroshi Yamauchi     delete c;
17cb30590dSHiroshi Yamauchi   }
18*fd739804SFangrui Song   // CHECK-LABEL: define{{.*}} void @_ZN5Test14evilEPNS_1DE
evil(D * p)19cb30590dSHiroshi Yamauchi   void evil(D *p) {
20cb30590dSHiroshi Yamauchi     // CHECK-NOT: call void @_ZN5Test11DD1Ev
21cb30590dSHiroshi Yamauchi     delete p;
22cb30590dSHiroshi Yamauchi   }
23cb30590dSHiroshi Yamauchi }
24