diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-30 00:52:53 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-30 00:52:53 +0000 |
commit | 65d5820892c9f9df6fdf5a49ae1f0a6cb5171c70 (patch) | |
tree | 26eef4951020b7021c2cc3681643d2b1b4e745b7 /clang/lib/Sema/SemaInherit.cpp | |
parent | 9a75111bc6f950354dd627e50c68e8917dbcfdd2 (diff) | |
download | bcm5719-llvm-65d5820892c9f9df6fdf5a49ae1f0a6cb5171c70.tar.gz bcm5719-llvm-65d5820892c9f9df6fdf5a49ae1f0a6cb5171c70.zip |
Add a member lookup criteria constructor for searching for overridden virtual member functions. Use this instead of regular name lookup when checking for overriding functions so we will see declarations that would otherwise be hidden. Fixes 6902298.
llvm-svn: 72601
Diffstat (limited to 'clang/lib/Sema/SemaInherit.cpp')
-rw-r--r-- | clang/lib/Sema/SemaInherit.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaInherit.cpp b/clang/lib/Sema/SemaInherit.cpp index 5eef1eb4c07..1eccc1f193f 100644 --- a/clang/lib/Sema/SemaInherit.cpp +++ b/clang/lib/Sema/SemaInherit.cpp @@ -191,6 +191,22 @@ bool Sema::LookupInBases(CXXRecordDecl *Class, ++Paths.ScratchPath.Decls.first; } break; + case MemberLookupCriteria::LK_OverriddenMember: + Paths.ScratchPath.Decls = + BaseRecord->lookup(Context, Criteria.Method->getDeclName()); + while (Paths.ScratchPath.Decls.first != Paths.ScratchPath.Decls.second) { + CXXMethodDecl *MD = + cast<CXXMethodDecl>(*Paths.ScratchPath.Decls.first); + + OverloadedFunctionDecl::function_iterator MatchedDecl; + if (MD->isVirtual() && !IsOverload(Criteria.Method, MD, MatchedDecl)) { + FoundPathToThisBase = true; + break; + } + + ++Paths.ScratchPath.Decls.first; + } + break; } if (FoundPathToThisBase) { |