diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-10 18:13:41 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2011-02-10 18:13:41 +0000 |
commit | 74b47f9173ccd2c22686b8fbf9d69852d6f46ac6 (patch) | |
tree | e071df696a2ad5934b9edce1be5cf2eda2d9f4f0 /lib/Sema/SemaDeclCXX.cpp | |
parent | 7f6890ebb874cc16320259daef50f1b4cfdc47d5 (diff) |
For -Woverloaded-virtual take into account canonical methods. Fixes rdar://8979966 & http://llvm.org/PR9182.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125296 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaDeclCXX.cpp')
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index 0f8f87143e..90ec795005 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -2827,6 +2827,7 @@ static bool FindHiddenVirtualMethod(const CXXBaseSpecifier *Specifier, ++Path.Decls.first) { NamedDecl *D = *Path.Decls.first; if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(D)) { + MD = MD->getCanonicalDecl(); foundSameNameMethod = true; // Interested only in hidden virtual methods. if (!MD->isVirtual()) @@ -2871,10 +2872,10 @@ void Sema::DiagnoseHiddenVirtualMethods(CXXRecordDecl *DC, CXXMethodDecl *MD) { for (CXXMethodDecl::method_iterator I = MD->begin_overridden_methods(), E = MD->end_overridden_methods(); I != E; ++I) - Data.OverridenAndUsingBaseMethods.insert(*I); + Data.OverridenAndUsingBaseMethods.insert((*I)->getCanonicalDecl()); if (UsingShadowDecl *shad = dyn_cast<UsingShadowDecl>(*res.first)) if (CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(shad->getTargetDecl())) - Data.OverridenAndUsingBaseMethods.insert(MD); + Data.OverridenAndUsingBaseMethods.insert(MD->getCanonicalDecl()); } if (DC->lookupInBases(&FindHiddenVirtualMethod, &Data, Paths) && |