summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaCXX/virtual-member-functions-key-function.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-12-07 08:24:59 +0000
committerAnders Carlsson <andersca@mac.com>2009-12-07 08:24:59 +0000
commit82fccd014a4f2e1fcbde11ed1c39c7fc70f28752 (patch)
tree5f295851790b782a5493ec036d49f7b82b050c30 /clang/test/SemaCXX/virtual-member-functions-key-function.cpp
parente1b3e6292a355dafc4757d7cd2f2e04ca71927fa (diff)
downloadbcm5719-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.cpp22
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}}
+}
OpenPOWER on IntegriCloud