| Index: tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl_error.cpp
|
| diff --git a/tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl_error.cpp b/tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl_error.cpp
|
| index 1ea1936437c714432da490e07f4ec4eab500fe80..23798f70275c3f4e6911146b80ed33be4ccfc5d9 100644
|
| --- a/tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl_error.cpp
|
| +++ b/tools/clang/blink_gc_plugin/tests/trace_after_dispatch_impl_error.cpp
|
| @@ -6,24 +6,37 @@
|
|
|
| namespace blink {
|
|
|
| -void TraceAfterDispatchInlinedBase::trace(Visitor* visitor) {
|
| - // Implement a simple form of manual dispatching, because BlinkGCPlugin gets
|
| - // angry if dispatching statements are missing.
|
| +template <typename VisitorDispatcher>
|
| +inline void TraceAfterDispatchInlinedBase::traceImpl(
|
| + VisitorDispatcher visitor) {
|
| + // Implement a simple form of manual dispatching, because BlinkGCPlugin
|
| + // checks if the tracing is dispatched to all derived classes.
|
| //
|
| // This function has to be implemented out-of-line, since we need to know the
|
| // definition of derived classes here.
|
| if (tag_ == DERIVED) {
|
| - static_cast<TraceAfterDispatchInlinedDerived*>(this)->traceAfterDispatch(
|
| - visitor);
|
| + // Missing dispatch call:
|
| + // static_cast<TraceAfterDispatchInlinedDerived*>(this)->traceAfterDispatch(
|
| + // visitor);
|
| } else {
|
| traceAfterDispatch(visitor);
|
| }
|
| }
|
|
|
| void TraceAfterDispatchExternBase::trace(Visitor* visitor) {
|
| + traceImpl(visitor);
|
| +}
|
| +
|
| +void TraceAfterDispatchExternBase::trace(InlinedGlobalMarkingVisitor visitor) {
|
| + traceImpl(visitor);
|
| +}
|
| +
|
| +template <typename VisitorDispatcher>
|
| +inline void TraceAfterDispatchExternBase::traceImpl(VisitorDispatcher visitor) {
|
| if (tag_ == DERIVED) {
|
| - static_cast<TraceAfterDispatchExternDerived*>(this)->traceAfterDispatch(
|
| - visitor);
|
| + // Missing dispatch call:
|
| + // static_cast<TraceAfterDispatchExternDerived*>(this)->traceAfterDispatch(
|
| + // visitor);
|
| } else {
|
| traceAfterDispatch(visitor);
|
| }
|
| @@ -33,6 +46,11 @@ void TraceAfterDispatchExternBase::traceAfterDispatch(Visitor* visitor) {
|
| traceAfterDispatchImpl(visitor);
|
| }
|
|
|
| +void TraceAfterDispatchExternBase::traceAfterDispatch(
|
| + InlinedGlobalMarkingVisitor visitor) {
|
| + traceAfterDispatchImpl(visitor);
|
| +}
|
| +
|
| template <typename VisitorDispatcher>
|
| inline void TraceAfterDispatchExternBase::traceAfterDispatchImpl(
|
| VisitorDispatcher visitor) {
|
| @@ -43,6 +61,11 @@ void TraceAfterDispatchExternDerived::traceAfterDispatch(Visitor* visitor) {
|
| traceAfterDispatchImpl(visitor);
|
| }
|
|
|
| +void TraceAfterDispatchExternDerived::traceAfterDispatch(
|
| + InlinedGlobalMarkingVisitor visitor) {
|
| + traceAfterDispatchImpl(visitor);
|
| +}
|
| +
|
| template <typename VisitorDispatcher>
|
| inline void TraceAfterDispatchExternDerived::traceAfterDispatchImpl(
|
| VisitorDispatcher visitor) {
|
|
|