Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / tools / clang / blink_gc_plugin / tests / cycle_super_neg.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CYCLE_SUPER_NEG_H_
6 #define CYCLE_SUPER_NEG_H_
7
8 #include "heap/stubs.h"
9
10 namespace blink {
11
12 class C;
13
14 // The chain:
15 //   C -per-> B -sup-> A -sub-> D -ref-> C
16 // is not a leaking cycle, because the super-class relationship
17 // should not transitively imply sub-class relationships.
18 // I.e. B -/-> D
19
20 class A : public GarbageCollectedFinalized<A> {
21 public:
22     virtual void trace(Visitor*) {}
23 };
24
25 class B : public A {
26 public:
27     virtual void trace(Visitor*);
28 };
29
30 class C : public RefCounted<C> {
31 private:
32     Persistent<B> m_b;
33 };
34
35 class D : public A {
36 public:
37     virtual void trace(Visitor*);
38 private:
39     RefPtr<C> m_c;
40 };
41
42 }
43
44 #endif