summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclCXX.cpp
diff options
context:
space:
mode:
authorSebastian Redl <sebastian.redl@getdesigned.at>2009-07-07 20:29:57 +0000
committerSebastian Redl <sebastian.redl@getdesigned.at>2009-07-07 20:29:57 +0000
commit86be854fa869f4c292e6b261d0ce1bf5d27b495e (patch)
tree0a2c6fbfaefe91cb44e117ea602a73e393484b21 /clang/lib/Sema/SemaDeclCXX.cpp
parente9f98047623959176f351d2001f2e8c10eb8b728 (diff)
downloadbcm5719-llvm-86be854fa869f4c292e6b261d0ce1bf5d27b495e.tar.gz
bcm5719-llvm-86be854fa869f4c292e6b261d0ce1bf5d27b495e.zip
Implement checking of exception spec compatibility for overriding virtual functions.
llvm-svn: 74943
Diffstat (limited to 'clang/lib/Sema/SemaDeclCXX.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclCXX.cpp13
1 files changed, 12 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaDeclCXX.cpp b/clang/lib/Sema/SemaDeclCXX.cpp
index 75ceb191655..72adcc22d10 100644
--- a/clang/lib/Sema/SemaDeclCXX.cpp
+++ b/clang/lib/Sema/SemaDeclCXX.cpp
@@ -882,7 +882,7 @@ namespace {
i != e; ++i) {
// Traverse the record, looking for methods.
if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(*i)) {
- // If the method is pre virtual, add it to the methods vector.
+ // If the method is pure virtual, add it to the methods vector.
if (MD->isPure()) {
Methods.push_back(MD);
continue;
@@ -3223,6 +3223,17 @@ bool Sema::CheckOverridingFunctionReturnType(const CXXMethodDecl *New,
return false;
}
+bool Sema::CheckOverridingFunctionExceptionSpec(const CXXMethodDecl *New,
+ const CXXMethodDecl *Old)
+{
+ return CheckExceptionSpecSubset(diag::err_override_exception_spec,
+ diag::note_overridden_virtual_function,
+ Old->getType()->getAsFunctionProtoType(),
+ Old->getLocation(),
+ New->getType()->getAsFunctionProtoType(),
+ New->getLocation());
+}
+
/// ActOnCXXEnterDeclInitializer - Invoked when we are about to parse an
/// initializer for the declaration 'Dcl'.
/// After this method is called, according to [C++ 3.4.1p13], if 'Dcl' is a
OpenPOWER on IntegriCloud