virtual-destructor-calls.cpp revision 0691a5c83246604a89654e0dfc25870e742035b4
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 -mconstructor-aliases | FileCheck %s 2 3struct Member { 4 ~Member(); 5}; 6 7struct A { 8 virtual ~A(); 9}; 10 11struct B : A { 12 Member m; 13 virtual ~B(); 14}; 15 16// Complete dtor: just an alias because there are no virtual bases. 17// CHECK: @_ZN1BD1Ev = alias {{.*}} @_ZN1BD2Ev 18 19// (aliases from C) 20// CHECK: @_ZN1CD1Ev = alias {{.*}} @_ZN1CD2Ev 21// CHECK: @_ZN1CD2Ev = alias bitcast {{.*}} @_ZN1BD2Ev 22 23// Deleting dtor: defers to the complete dtor. 24// CHECK: define void @_ZN1BD0Ev(%struct.B* %this) unnamed_addr 25// CHECK: call void @_ZN1BD1Ev 26// CHECK: call void @_ZdlPv 27 28// Base dtor: actually calls A's base dtor. 29// CHECK: define void @_ZN1BD2Ev(%struct.B* %this) unnamed_addr 30// CHECK: call void @_ZN6MemberD1Ev 31// CHECK: call void @_ZN1AD2Ev 32 33B::~B() { } 34 35struct C : B { 36 ~C(); 37}; 38 39C::~C() { } 40 41// Complete dtor: just an alias (checked above). 42 43// Deleting dtor: defers to the complete dtor. 44// CHECK: define void @_ZN1CD0Ev(%struct.C* %this) unnamed_addr 45// CHECK: call void @_ZN1CD1Ev 46// CHECK: call void @_ZdlPv 47 48// Base dtor: just an alias to B's base dtor. 49