summaryrefslogtreecommitdiffstats
path: root/clang/lib
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/lib
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/lib')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index c9c58b3e3a4..89332eae0e0 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -2769,6 +2769,14 @@ void Sema::CheckCompletedCXXClass(CXXRecordDecl *Record) {
}
}
}
+
+ // Warn if the class has virtual methods but non-virtual destructor.
+ if (Record->isDynamicClass()) {
+ CXXDestructorDecl *dtor = Record->getDestructor();
+ if (!(dtor && dtor->isVirtual()))
+ Diag(dtor ? dtor->getLocation() : Record->getLocation(),
+ diag::warn_non_virtual_dtor) << Context.getRecordType(Record);
+ }
}
void Sema::ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
OpenPOWER on IntegriCloud