From 668fdd8578c85aa2692ffdeb7614acabf1aaab25 Mon Sep 17 00:00:00 2001 From: Argyrios Kyrtzidis Date: Wed, 2 Feb 2011 18:47:41 +0000 Subject: [PATCH] Don't warn for -Wnon-virtual-dtor for dependent classes. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124735 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaDeclCXX.cpp | 2 +- test/SemaCXX/destructor.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index c6ffcc759e..b4c375d638 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/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/test/SemaCXX/destructor.cpp b/test/SemaCXX/destructor.cpp index ce01b3acc5..ec437f7101 100644 --- a/test/SemaCXX/destructor.cpp +++ b/test/SemaCXX/destructor.cpp @@ -159,4 +159,16 @@ struct S7 { protected: ~S7(); }; + +template class TS : public B { + virtual void m(); +}; + +TS baz; + +template class TS2 { // expected-warning {{'nonvirtualdtor::TS2' has virtual functions but non-virtual destructor}} + virtual void m(); +}; + +TS2 foo; // expected-note {{instantiation}} } -- 2.40.0