Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(140)

Side by Side Diff: tools/clang/blink_gc_plugin/tests/stack_allocated.h

Issue 2685583002: blink_gc_plugin: warn of unused trace methods to stack allocated classes. (Closed)
Patch Set: rebased upto r449038 Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef STACK_ALLOCATED_H_ 5 #ifndef STACK_ALLOCATED_H_
6 #define STACK_ALLOCATED_H_ 6 #define STACK_ALLOCATED_H_
7 7
8 #include "heap/stubs.h" 8 #include "heap/stubs.h"
9 9
10 namespace blink { 10 namespace blink {
11 11
12 class HeapObject; 12 class HeapObject;
13 13
14 class PartObject { 14 class PartObject {
15 DISALLOW_NEW(); 15 DISALLOW_NEW();
16 private: 16 private:
17 Member<HeapObject> m_obj; // Needs tracing. 17 Member<HeapObject> m_obj; // Needs tracing.
18 }; 18 };
19 19
20 class StackObject { 20 class StackObject {
21 STACK_ALLOCATED(); 21 STACK_ALLOCATED();
22
23 // Redundant trace() method, warning/error expected.
24 void Trace(Visitor* visitor) { visitor->Trace(m_obj); }
25
22 private: 26 private:
23 Member<HeapObject> m_obj; // Does not need tracing. 27 Member<HeapObject> m_obj; // Does not need tracing.
24 }; 28 };
25 29
26 class HeapObject : public GarbageCollected<HeapObject> { 30 class HeapObject : public GarbageCollected<HeapObject> {
27 public: 31 public:
28 void Trace(Visitor*); 32 void Trace(Visitor*);
29 private: 33 private:
30 StackObject m_part; // Cannot embed a stack allocated object. 34 StackObject m_part; // Cannot embed a stack allocated object.
31 }; 35 };
32 36
33 // Cannot derive from both heap- and stack-allocated objects. 37 // Cannot derive from both heap- and stack-allocated objects.
34 class DerivedHeapObject : public HeapObject, public StackObject { 38 class DerivedHeapObject : public HeapObject, public StackObject {
35 }; 39 };
36 40
37 // Cannot be stack-allocated and derive from a heap-allocated object. 41 // Cannot be stack-allocated and derive from a heap-allocated object.
38 class DerivedHeapObject2 : public HeapObject { 42 class DerivedHeapObject2 : public HeapObject {
39 STACK_ALLOCATED(); 43 STACK_ALLOCATED();
40 }; 44 };
41 45
42 // STACK_ALLOCATED is inherited. 46 // STACK_ALLOCATED is inherited.
43 class DerivedStackObject : public StackObject { 47 class DerivedStackObject : public StackObject {
44 private: 48 private:
45 StackObject m_anotherPart; // Also fine. 49 StackObject m_anotherPart; // Also fine.
46 }; 50 };
47 51
48 } 52 }
49 53
50 #endif 54 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698