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 473ad204e33b40a77239668f7cb26ebdabc81608..7dae3810150a394785d0f80835ba81534bccac30 100644 |
--- a/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp |
+++ b/tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp |
@@ -470,12 +470,17 @@ class CheckTraceVisitor : public RecursiveASTVisitor<CheckTraceVisitor> { |
if (!fn || !Config::IsTraceMethod(fn, nullptr)) |
return false; |
- // 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 (fn->getName() != trace_->getName()) |
- return false; |
+ if (trace_->getName() == kTraceImplName) { |
+ if (fn->getName() != kTraceName) |
+ return false; |
+ } else { |
+ // 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 (fn->getName() != trace_->getName()) |
+ return false; |
+ } |
CXXRecordDecl* decl = 0; |
if (callee && callee->hasQualifier()) { |