diff options
| author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-01-31 07:05:00 +0000 |
|---|---|---|
| committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-01-31 07:05:00 +0000 |
| commit | 7f3986dc64fdbb1a8036cfb0b67a156233bc1995 (patch) | |
| tree | 2535d2f5d176397a79b4cd859d10e70fb1f7b39f /clang/test | |
| parent | f46cc65f445e2f14ee842364a75b28596147686b (diff) | |
| download | bcm5719-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.cpp | 30 |
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(); +}; +} |

