| Index: tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
|
| diff --git a/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp b/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
|
| index e726a842e0275fc00a07ba4da571326d758c79d0..d57d7d70a2979308e10673c84af1eaa362149477 100644
|
| --- a/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
|
| +++ b/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp
|
| @@ -356,10 +356,13 @@ class CheckTraceVisitor : public RecursiveASTVisitor<CheckTraceVisitor> {
|
| return true;
|
| }
|
|
|
| - // TODO: It is possible to have multiple bases, where one must be traced
|
| - // using a traceAfterDispatch. In such a case we should also check that
|
| - // the mixin does not add a vtable.
|
| - if (Config::IsTraceMethod(fn) && member->hasQualifier()) {
|
| + // Currently, a manually dispatched class cannot have mixin bases (having
|
| + // one would add a vtable which we explicitly check against). This means
|
| + // that we can only make calls to a trace method of the same name. Revisit
|
| + // this if our mixin/vtable assumption changes.
|
| + if (Config::IsTraceMethod(fn) &&
|
| + fn->getName() == trace_->getName() &&
|
| + member->hasQualifier()) {
|
| if (const Type* type = member->getQualifier()->getAsType()) {
|
| if (CXXRecordDecl* decl = type->getAsCXXRecordDecl()) {
|
| RecordInfo::Bases::iterator it = info_->GetBases().find(decl);
|
|
|