diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-02 18:47:41 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-02 18:47:41 +0000 |
commit | 83b797f490c0b8c65a5b560c65aeb4bc0780907f (patch) | |
tree | dfa5baece4342d2428144e0c1ac29897d3c14eab | |
parent | 96f6e379e209ea72d7be722f574cd3a86f15e711 (diff) | |
download | bcm5719-llvm-83b797f490c0b8c65a5b560c65aeb4bc0780907f.tar.gz bcm5719-llvm-83b797f490c0b8c65a5b560c65aeb4bc0780907f.zip |
Don't warn for -Wnon-virtual-dtor for dependent classes.
llvm-svn: 124735
-rw-r--r-- | clang/lib/Sema/SemaDeclCXX.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/destructor.cpp | 12 |
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp index c6ffcc759ec..b4c375d638a 100644 --- a/clang/lib/Sema/SemaDeclCXX.cpp +++ b/clang/lib/Sema/SemaDeclCXX.cpp @@ -2771,7 +2771,7 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) { } // Warn if the class has virtual methods but non-virtual public destructor. - if (Record->isDynamicClass()) { + if (Record->isDynamicClass() && !Record->isDependentType()) { CXXDestructorDecl *dtor = Record->getDestructor(); if (!dtor || (!dtor->isVirtual() && dtor->getAccess() == AS_public)) Diag(dtor ? dtor->getLocation() : Record->getLocation(), diff --git a/clang/test/SemaCXX/destructor.cpp b/clang/test/SemaCXX/destructor.cpp index ce01b3acc5a..ec437f7101e 100644 --- a/clang/test/SemaCXX/destructor.cpp +++ b/clang/test/SemaCXX/destructor.cpp @@ -159,4 +159,16 @@ struct S7 { protected: ~S7(); }; + +template<class T> class TS : public B { + virtual void m(); +}; + +TS<int> baz; + +template<class T> class TS2 { // expected-warning {{'nonvirtualdtor::TS2<int>' has virtual functions but non-virtual destructor}} + virtual void m(); +}; + +TS2<int> foo; // expected-note {{instantiation}} } |