diff options
Diffstat (limited to 'tools/clang/blink_gc_plugin/tests/legacy_naming/traceimpl_overloaded_error.h')
-rw-r--r-- | tools/clang/blink_gc_plugin/tests/legacy_naming/traceimpl_overloaded_error.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/tools/clang/blink_gc_plugin/tests/legacy_naming/traceimpl_overloaded_error.h b/tools/clang/blink_gc_plugin/tests/legacy_naming/traceimpl_overloaded_error.h new file mode 100644 index 00000000..7d7a0383 --- /dev/null +++ b/tools/clang/blink_gc_plugin/tests/legacy_naming/traceimpl_overloaded_error.h @@ -0,0 +1,76 @@ +// Copyright 2015 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef TRACEIMPL_OVERLOADED_ERROR_H_ +#define TRACEIMPL_OVERLOADED_ERROR_H_ + +#include "heap/stubs.h" + +namespace blink { + +class X : public GarbageCollected<X> { + public: + void trace(Visitor*) {} + void trace(InlinedGlobalMarkingVisitor) {} +}; + +class InlinedBase : public GarbageCollected<InlinedBase> { + public: + virtual void trace(Visitor* visitor) { traceImpl(visitor); } + virtual void trace(InlinedGlobalMarkingVisitor visitor) { + traceImpl(visitor); + } + + private: + template <typename VisitorDispatcher> + void traceImpl(VisitorDispatcher visitor) { + // Missing visitor->trace(x_base_). + } + + Member<X> x_base_; +}; + +class InlinedDerived : public InlinedBase { + public: + void trace(Visitor* visitor) override { traceImpl(visitor); } + void trace(InlinedGlobalMarkingVisitor visitor) override { + traceImpl(visitor); + } + + private: + template <typename VisitorDispatcher> + void traceImpl(VisitorDispatcher visitor) { + // Missing visitor->trace(x_derived_) and InlinedBase::trace(visitor). + } + + Member<X> x_derived_; +}; + +class ExternBase : public GarbageCollected<ExternBase> { + public: + virtual void trace(Visitor*); + virtual void trace(InlinedGlobalMarkingVisitor); + + private: + template <typename VisitorDispatcher> + void traceImpl(VisitorDispatcher); + + Member<X> x_base_; +}; + +class ExternDerived : public ExternBase { + public: + void trace(Visitor*) override; + void trace(InlinedGlobalMarkingVisitor) override; + + private: + template <typename VisitorDispatcher> + void traceImpl(VisitorDispatcher); + + Member<X> x_derived_; +}; + +} + +#endif // TRACEIMPL_OVERLOADED_ERROR_H_ |