diff options
author | Anders Carlsson <andersca@mac.com> | 2009-12-07 08:24:59 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-12-07 08:24:59 +0000 |
commit | 82fccd014a4f2e1fcbde11ed1c39c7fc70f28752 (patch) | |
tree | 5f295851790b782a5493ec036d49f7b82b050c30 /clang/test/SemaCXX/virtual-member-functions-key-function.cpp | |
parent | e1b3e6292a355dafc4757d7cd2f2e04ca71927fa (diff) | |
download | bcm5719-llvm-82fccd014a4f2e1fcbde11ed1c39c7fc70f28752.tar.gz bcm5719-llvm-82fccd014a4f2e1fcbde11ed1c39c7fc70f28752.zip |
Rework how virtual member functions are marked. If a class has no key function, we now wait until the end of the translation unit to mark its virtual member functions as references. This lays the groundwork for fixing PR5557.
llvm-svn: 90752
Diffstat (limited to 'clang/test/SemaCXX/virtual-member-functions-key-function.cpp')
-rw-r--r-- | clang/test/SemaCXX/virtual-member-functions-key-function.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/clang/test/SemaCXX/virtual-member-functions-key-function.cpp b/clang/test/SemaCXX/virtual-member-functions-key-function.cpp new file mode 100644 index 00000000000..4e7ff69b2ed --- /dev/null +++ b/clang/test/SemaCXX/virtual-member-functions-key-function.cpp @@ -0,0 +1,22 @@ +// RUN: clang-cc -fsyntax-only -verify %s +struct A { + virtual ~A(); +}; + +struct B : A { // expected-error {{no suitable member 'operator delete' in 'B'}} + B() { } // expected-note {{implicit default destructor for 'struct B' first required here}} + void operator delete(void *, int); // expected-note {{'operator delete' declared here}} +}; + +struct C : A { // expected-error {{no suitable member 'operator delete' in 'C'}} + void operator delete(void *, int); // expected-note {{'operator delete' declared here}} +}; + +void f() { + // new B should mark the constructor as used, which then marks + // all the virtual members as used, because B has no key function. + (void)new B; + + // Same here, except that C has an implicit constructor. + (void)new C; // expected-note {{implicit default destructor for 'struct C' first required here}} +} |