diff options
author | Anders Carlsson <andersca@mac.com> | 2011-02-03 02:08:44 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2011-02-03 02:08:44 +0000 |
commit | bac84bef65868fbd1dc5db613a1d389e7322a253 (patch) | |
tree | e5e5a3b716d478de492760b477034ba4ad7ec30e /clang/test/CodeGenCXX/vtable-available-externally.cpp | |
parent | 50a2e0e894083f57f5635155ed79136363a9a442 (diff) | |
download | bcm5719-llvm-bac84bef65868fbd1dc5db613a1d389e7322a253.tar.gz bcm5719-llvm-bac84bef65868fbd1dc5db613a1d389e7322a253.zip |
Don't try to mark virtual members referenced for classes where the key function
is not defined in the current translation unit. Doing so lead to compile errors
such as PR9114.
Instead, when CodeGen is building the vtable, don't try to emit a definition
for functions that aren't marked used in the current translation unit.
Fixes PR9114.
llvm-svn: 124768
Diffstat (limited to 'clang/test/CodeGenCXX/vtable-available-externally.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/vtable-available-externally.cpp | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/vtable-available-externally.cpp b/clang/test/CodeGenCXX/vtable-available-externally.cpp index b6e48c8f8c9..11c1abda4ba 100644 --- a/clang/test/CodeGenCXX/vtable-available-externally.cpp +++ b/clang/test/CodeGenCXX/vtable-available-externally.cpp @@ -53,3 +53,51 @@ 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 emit a definition of +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; +} + +} |