summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaInherit.cpp
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-05-30 00:52:53 +0000
committerAnders Carlsson <andersca@mac.com>2009-05-30 00:52:53 +0000
commit65d5820892c9f9df6fdf5a49ae1f0a6cb5171c70 (patch)
tree26eef4951020b7021c2cc3681643d2b1b4e745b7 /clang/lib/Sema/SemaInherit.cpp
parent9a75111bc6f950354dd627e50c68e8917dbcfdd2 (diff)
downloadbcm5719-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.cpp16
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) {
OpenPOWER on IntegriCloud