diff options
Diffstat (limited to 'lib/Sema/SemaDecl.cpp')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 47 |
1 files changed, 0 insertions, 47 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index 62adcf9bb1..85df57a76c 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -3372,52 +3372,6 @@ static void DiagnoseInvalidRedeclaration(Sema &S, FunctionDecl *NewFD) { } } -/// CheckClassMemberNameAttributes - Check for class member name checking -/// attributes according to [dcl.attr.override] -static void -CheckClassMemberNameAttributes(Sema& SemaRef, const FunctionDecl *FD) { - const CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(FD); - if (!MD || !MD->isVirtual()) - return; - - bool HasOverrideAttr = MD->hasAttr<OverrideAttr>(); - bool HasOverriddenMethods = - MD->begin_overridden_methods() != MD->end_overridden_methods(); - - /// C++ [dcl.attr.override]p2: - /// If a virtual member function f is marked override and does not override - /// a member function of a base class the program is ill-formed. - if (HasOverrideAttr && !HasOverriddenMethods) { - SemaRef.Diag(MD->getLocation(), - diag::err_function_marked_override_not_overriding) - << MD->getDeclName(); - return; - } - - if (!MD->getParent()->hasAttr<BaseCheckAttr>()) - return; - - /// C++ [dcl.attr.override]p6: - /// In a class definition marked base_check, if a virtual member function - /// that is neither implicitly-declared nor a destructor overrides a - /// member function of a base class and it is not marked override, the - /// program is ill-formed. - if (HasOverriddenMethods && !HasOverrideAttr && !MD->isImplicit() && - !isa<CXXDestructorDecl>(MD)) { - llvm::SmallVector<const CXXMethodDecl*, 4> - OverriddenMethods(MD->begin_overridden_methods(), - MD->end_overridden_methods()); - - SemaRef.Diag(MD->getLocation(), - diag::err_function_overriding_without_override) - << MD->getDeclName() << (unsigned)OverriddenMethods.size(); - - for (unsigned I = 0; I != OverriddenMethods.size(); ++I) - SemaRef.Diag(OverriddenMethods[I]->getLocation(), - diag::note_overridden_virtual_function); - } -} - NamedDecl* Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, QualType R, TypeSourceInfo *TInfo, @@ -4095,7 +4049,6 @@ Sema::ActOnFunctionDeclarator(Scope* S, Declarator& D, DeclContext* DC, FunctionTemplate->setInvalidDecl(); return FunctionTemplate; } - CheckClassMemberNameAttributes(*this, NewFD); } MarkUnusedFileScopedDecl(NewFD); |