diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2015-07-25 15:07:25 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2015-07-25 15:07:25 +0000 |
commit | 6e4f6e1f06aaca0d1479e324c30162251692a59b (patch) | |
tree | 94e15a16642f28fdd5cfc611291f1ca205489e24 /clang/lib/AST/VTableBuilder.cpp | |
parent | 944a5777bba28ff905fd0fae7d29b0eb9200b315 (diff) | |
download | bcm5719-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.cpp | 14 |
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 |