brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 7923c25 Raw
60 lines · cpp
1// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 -mconstructor-aliases -O1 -disable-llvm-passes | FileCheck %s2 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 ={{.*}} unnamed_addr alias {{.*}} @_ZN1BD2Ev18 19// (aliases from C)20// CHECK: @_ZN1CD2Ev ={{.*}} unnamed_addr alias {{.*}} @_ZN1BD2Ev21// CHECK: @_ZN1CD1Ev ={{.*}} unnamed_addr alias {{.*}} @_ZN1CD2Ev22 23// Base dtor: actually calls A's base dtor.24// CHECK-LABEL: define{{.*}} void @_ZN1BD2Ev(ptr {{[^,]*}} %this) unnamed_addr25// CHECK: call void @_ZN6MemberD1Ev26// CHECK: call void @_ZN1AD2Ev27 28// Deleting dtor: defers to the complete dtor.29// CHECK-LABEL: define{{.*}} void @_ZN1BD0Ev(ptr {{[^,]*}} %this) unnamed_addr30// CHECK: call void @_ZN1BD1Ev31// CHECK: call void @_ZdlPv32 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-LABEL: define{{.*}} void @_ZN1CD0Ev(ptr {{[^,]*}} %this) unnamed_addr45// CHECK: call void @_ZN1CD1Ev46// CHECK: call void @_ZdlPv47 48// Base dtor: just an alias to B's base dtor.49 50namespace PR12798 {51  // A qualified call to a base class destructor should not undergo virtual52  // dispatch. Template instantiation used to lose the qualifier.53  struct A { virtual ~A(); };54  template<typename T> void f(T *p) { p->A::~A(); }55 56  // CHECK: define {{.*}} @_ZN7PR127981fINS_1AEEEvPT_(57  // CHECK: call void @_ZN7PR127981AD1Ev(58  template void f(A*);59}60