From 222e2a7620e6520ffaf4fc4e69d79c18da31542e Mon Sep 17 00:00:00 2001 From: "Zancanaro; Carlo" Date: Mon, 24 Sep 2012 09:58:17 +1000 Subject: Add the clang library to the repo (with some of my changes, too). --- clang/test/CodeGenCXX/virtual-destructor-calls.cpp | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 clang/test/CodeGenCXX/virtual-destructor-calls.cpp (limited to 'clang/test/CodeGenCXX/virtual-destructor-calls.cpp') diff --git a/clang/test/CodeGenCXX/virtual-destructor-calls.cpp b/clang/test/CodeGenCXX/virtual-destructor-calls.cpp new file mode 100644 index 0000000..1cc8bcc --- /dev/null +++ b/clang/test/CodeGenCXX/virtual-destructor-calls.cpp @@ -0,0 +1,48 @@ +// RUN: %clang_cc1 -emit-llvm %s -o - -triple=x86_64-apple-darwin10 -mconstructor-aliases | FileCheck %s + +struct Member { + ~Member(); +}; + +struct A { + virtual ~A(); +}; + +struct B : A { + Member m; + virtual ~B(); +}; + +// Complete dtor: just an alias because there are no virtual bases. +// CHECK: @_ZN1BD1Ev = alias {{.*}} @_ZN1BD2Ev + +// (aliases from C) +// CHECK: @_ZN1CD1Ev = alias {{.*}} @_ZN1CD2Ev +// CHECK: @_ZN1CD2Ev = alias bitcast {{.*}} @_ZN1BD2Ev + +// Deleting dtor: defers to the complete dtor. +// CHECK: define void @_ZN1BD0Ev(%struct.B* %this) unnamed_addr +// CHECK: call void @_ZN1BD1Ev +// CHECK: call void @_ZdlPv + +// Base dtor: actually calls A's base dtor. +// CHECK: define void @_ZN1BD2Ev(%struct.B* %this) unnamed_addr +// CHECK: call void @_ZN6MemberD1Ev +// CHECK: call void @_ZN1AD2Ev + +B::~B() { } + +struct C : B { + ~C(); +}; + +C::~C() { } + +// Complete dtor: just an alias (checked above). + +// Deleting dtor: defers to the complete dtor. +// CHECK: define void @_ZN1CD0Ev(%struct.C* %this) unnamed_addr +// CHECK: call void @_ZN1CD1Ev +// CHECK: call void @_ZdlPv + +// Base dtor: just an alias to B's base dtor. -- cgit v1.2.3