summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-01-31 07:05:00 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-01-31 07:05:00 +0000
commit7f3986dc64fdbb1a8036cfb0b67a156233bc1995 (patch)
tree2535d2f5d176397a79b4cd859d10e70fb1f7b39f /clang/test
parentf46cc65f445e2f14ee842364a75b28596147686b (diff)
downloadbcm5719-llvm-7f3986dc64fdbb1a8036cfb0b67a156233bc1995.tar.gz
bcm5719-llvm-7f3986dc64fdbb1a8036cfb0b67a156233bc1995.zip
Warn if the class has virtual methods but non-virtual destructor. Addresses rdar://8756445.
llvm-svn: 124582
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/SemaCXX/destructor.cpp30
1 files changed, 29 insertions, 1 deletions
diff --git a/clang/test/SemaCXX/destructor.cpp b/clang/test/SemaCXX/destructor.cpp
index 72268bd43ac..a86859c62d9 100644
--- a/clang/test/SemaCXX/destructor.cpp
+++ b/clang/test/SemaCXX/destructor.cpp
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fsyntax-only -Wnon-virtual-dtor -verify %s
class A {
public:
~A();
@@ -120,3 +120,31 @@ namespace test7 {
b->~B();
}
}
+
+namespace nonvirtualdtor {
+struct S1 { // expected-warning {{has virtual functions but non-virtual destructor}}
+ virtual void m();
+};
+
+struct S2 {
+ ~S2(); // expected-warning {{has virtual functions but non-virtual destructor}}
+ virtual void m();
+};
+
+struct S3 : public S1 { // expected-warning {{has virtual functions but non-virtual destructor}}
+ virtual void m();
+};
+
+struct S4 : public S2 { // expected-warning {{has virtual functions but non-virtual destructor}}
+ virtual void m();
+};
+
+struct B {
+ virtual ~B();
+ virtual void m();
+};
+
+struct S5 : public B {
+ virtual void m();
+};
+}
OpenPOWER on IntegriCloud