diff options
author | Anders Carlsson <andersca@mac.com> | 2011-02-05 04:35:53 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2011-02-05 04:35:53 +0000 |
commit | 3c23948481d8319f26f860dc0dad1f4d4d7f1037 (patch) | |
tree | 3af24accd8396a246770064218271002899389d9 /clang/test/CodeGenCXX/vtable-available-externally.cpp | |
parent | 43dff0f4b47473dfecdbdb252567969686bcdeba (diff) | |
download | bcm5719-llvm-3c23948481d8319f26f860dc0dad1f4d4d7f1037.tar.gz bcm5719-llvm-3c23948481d8319f26f860dc0dad1f4d4d7f1037.zip |
Re-land r124768, with a fix for PR9130.
We now emit everything except unused implicit virtual member functions when building the vtable.
llvm-svn: 124935
Diffstat (limited to 'clang/test/CodeGenCXX/vtable-available-externally.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/vtable-available-externally.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/vtable-available-externally.cpp b/clang/test/CodeGenCXX/vtable-available-externally.cpp index b6e48c8f8c9..594709d589a 100644 --- a/clang/test/CodeGenCXX/vtable-available-externally.cpp +++ b/clang/test/CodeGenCXX/vtable-available-externally.cpp @@ -1,6 +1,7 @@ // RUN: %clang_cc1 %s -I%S -triple=x86_64-apple-darwin10 -emit-llvm -O3 -o %t // RUN: FileCheck --check-prefix=CHECK-TEST1 %s < %t // RUN: FileCheck --check-prefix=CHECK-TEST2 %s < %t +// RUN: FileCheck --check-prefix=CHECK-TEST5 %s < %t #include <typeinfo> @@ -53,3 +54,67 @@ namespace Test2 { void A::f() { } } + +// Test that we don't assert on this test. +namespace Test3 { + +struct A { + virtual void f(); + virtual ~A() { } +}; + +struct B : A { + B(); + virtual void f(); +}; + +B::B() { } + +void g(A* a) { + a->f(); +}; + +} + +// PR9114, test that we don't try to instantiate RefPtr<Node>. +namespace Test4 { + +template <class T> struct RefPtr { + T* p; + ~RefPtr() { + p->deref(); + } +}; + +struct A { + virtual ~A(); +}; + +struct Node; + +struct B : A { + virtual void deref(); + RefPtr<Node> m; +}; + +void f() { + RefPtr<B> b; +} + +} + +// PR9130, test that we emit a definition of A::f. +// CHECK-TEST5: define linkonce_odr void @_ZN5Test51A1fEv +namespace Test5 { + +struct A { + virtual void f() { } +}; + +struct B : A { + virtual ~B(); +}; + +B::~B() { } + +} |