summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/VTableBuilder.cpp
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2015-07-25 15:07:25 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2015-07-25 15:07:25 +0000
commit6e4f6e1f06aaca0d1479e324c30162251692a59b (patch)
tree94e15a16642f28fdd5cfc611291f1ca205489e24 /clang/lib/AST/VTableBuilder.cpp
parent944a5777bba28ff905fd0fae7d29b0eb9200b315 (diff)
downloadbcm5719-llvm-6e4f6e1f06aaca0d1479e324c30162251692a59b.tar.gz
bcm5719-llvm-6e4f6e1f06aaca0d1479e324c30162251692a59b.zip
[AST] Turn the callbacks of lookupInBases and forallBases into a function_ref
This lets us pass functors (and lambdas) without void * tricks. On the downside we can't pass CXXRecordDecl's Find* members (which are now type safe) to lookupInBases directly, but a lambda trampoline is a small price to pay. No functionality change intended. llvm-svn: 243217
Diffstat (limited to 'clang/lib/AST/VTableBuilder.cpp')
-rw-r--r--clang/lib/AST/VTableBuilder.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/clang/lib/AST/VTableBuilder.cpp b/clang/lib/AST/VTableBuilder.cpp
index ca5f0aad001..359e3498028 100644
--- a/clang/lib/AST/VTableBuilder.cpp
+++ b/clang/lib/AST/VTableBuilder.cpp
@@ -2649,12 +2649,6 @@ struct InitialOverriddenDefinitionCollector {
} // end namespace
-static bool BaseInSet(const CXXBaseSpecifier *Specifier,
- CXXBasePath &Path, void *BasesSet) {
- BasesSetVectorTy *Bases = (BasesSetVectorTy *)BasesSet;
- return Bases->count(Specifier->getType()->getAsCXXRecordDecl());
-}
-
// Let's study one class hierarchy as an example:
// struct A {
// virtual void f();
@@ -2720,8 +2714,12 @@ VFTableBuilder::ComputeThisOffset(FinalOverriders::OverriderInfo Overrider) {
return Overrider.Offset;
CXXBasePaths Paths;
- Overrider.Method->getParent()->lookupInBases(BaseInSet, &Collector.Bases,
- Paths);
+ Overrider.Method->getParent()->lookupInBases(
+ [&Collector](const CXXBaseSpecifier *Specifier, CXXBasePath &) {
+ return Collector.Bases.count(
+ Specifier->getType()->getAsCXXRecordDecl());
+ },
+ Paths);
// This will hold the smallest this offset among overridees of MD.
// This implies that an offset of a non-virtual base will dominate an offset
OpenPOWER on IntegriCloud