OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ | 5 #ifndef TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ |
6 #define TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ | 6 #define TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ |
7 | 7 |
8 #include "CheckFieldsVisitor.h" | 8 #include "CheckFieldsVisitor.h" |
9 #include "CheckFinalizerVisitor.h" | 9 #include "CheckFinalizerVisitor.h" |
10 #include "CheckGCRootsVisitor.h" | 10 #include "CheckGCRootsVisitor.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 explicit DiagnosticsReporter(clang::CompilerInstance&); | 23 explicit DiagnosticsReporter(clang::CompilerInstance&); |
24 | 24 |
25 bool hasErrorOccurred() const; | 25 bool hasErrorOccurred() const; |
26 clang::DiagnosticsEngine::Level getErrorLevel() const; | 26 clang::DiagnosticsEngine::Level getErrorLevel() const; |
27 | 27 |
28 void ClassMustLeftMostlyDeriveGC(RecordInfo* info); | 28 void ClassMustLeftMostlyDeriveGC(RecordInfo* info); |
29 void ClassRequiresTraceMethod(RecordInfo* info); | 29 void ClassRequiresTraceMethod(RecordInfo* info); |
30 void BaseRequiresTracing(RecordInfo* derived, | 30 void BaseRequiresTracing(RecordInfo* derived, |
31 clang::CXXMethodDecl* trace, | 31 clang::CXXMethodDecl* trace, |
32 clang::CXXRecordDecl* base); | 32 clang::CXXRecordDecl* base); |
33 void FieldsRequireTracing(RecordInfo* info, | 33 void FieldsImproperlyTraced(RecordInfo* info, |
34 clang::CXXMethodDecl* trace); | 34 clang::CXXMethodDecl* trace); |
35 void ClassContainsInvalidFields( | 35 void ClassContainsInvalidFields( |
36 RecordInfo* info, | 36 RecordInfo* info, |
37 const CheckFieldsVisitor::Errors& errors); | 37 const CheckFieldsVisitor::Errors& errors); |
38 void ClassContainsGCRoots(RecordInfo* info, | 38 void ClassContainsGCRoots(RecordInfo* info, |
39 const CheckGCRootsVisitor::Errors& errors); | 39 const CheckGCRootsVisitor::Errors& errors); |
40 void FinalizerAccessesFinalizedFields( | 40 void FinalizerAccessesFinalizedFields( |
41 clang::CXXMethodDecl* dtor, | 41 clang::CXXMethodDecl* dtor, |
42 const CheckFinalizerVisitor::Errors& errors); | 42 const CheckFinalizerVisitor::Errors& errors); |
43 void ClassRequiresFinalization(RecordInfo* info); | 43 void ClassRequiresFinalization(RecordInfo* info); |
44 void ClassDoesNotRequireFinalization(RecordInfo* info); | 44 void ClassDoesNotRequireFinalization(RecordInfo* info); |
(...skipping 14 matching lines...) Expand all Loading... |
59 void ClassDeclaresPureVirtualTrace(RecordInfo* info, | 59 void ClassDeclaresPureVirtualTrace(RecordInfo* info, |
60 clang::CXXMethodDecl* trace); | 60 clang::CXXMethodDecl* trace); |
61 void LeftMostBaseMustBePolymorphic(RecordInfo* derived, | 61 void LeftMostBaseMustBePolymorphic(RecordInfo* derived, |
62 clang::CXXRecordDecl* base); | 62 clang::CXXRecordDecl* base); |
63 void BaseClassMustDeclareVirtualTrace(RecordInfo* derived, | 63 void BaseClassMustDeclareVirtualTrace(RecordInfo* derived, |
64 clang::CXXRecordDecl* base); | 64 clang::CXXRecordDecl* base); |
65 | 65 |
66 void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch); | 66 void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch); |
67 void NoteBaseRequiresTracing(BasePoint* base); | 67 void NoteBaseRequiresTracing(BasePoint* base); |
68 void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field); | 68 void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field); |
| 69 void NoteFieldShouldNotBeTraced(RecordInfo* holder, clang::FieldDecl* field); |
69 void NotePartObjectContainsGCRoot(FieldPoint* point); | 70 void NotePartObjectContainsGCRoot(FieldPoint* point); |
70 void NoteFieldContainsGCRoot(FieldPoint* point); | 71 void NoteFieldContainsGCRoot(FieldPoint* point); |
71 void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor); | 72 void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor); |
72 void NoteUserDeclaredFinalizer(clang::CXXMethodDecl* dtor); | 73 void NoteUserDeclaredFinalizer(clang::CXXMethodDecl* dtor); |
73 void NoteBaseRequiresFinalization(BasePoint* base); | 74 void NoteBaseRequiresFinalization(BasePoint* base); |
74 void NoteFieldRequiresFinalization(FieldPoint* field); | 75 void NoteFieldRequiresFinalization(FieldPoint* field); |
75 void NoteField(FieldPoint* point, unsigned note); | 76 void NoteField(FieldPoint* point, unsigned note); |
76 void NoteField(clang::FieldDecl* field, unsigned note); | 77 void NoteField(clang::FieldDecl* field, unsigned note); |
77 void NoteOverriddenNonVirtualTrace(clang::CXXMethodDecl* overridden); | 78 void NoteOverriddenNonVirtualTrace(clang::CXXMethodDecl* overridden); |
78 | 79 |
79 private: | 80 private: |
80 clang::DiagnosticBuilder ReportDiagnostic( | 81 clang::DiagnosticBuilder ReportDiagnostic( |
81 clang::SourceLocation location, | 82 clang::SourceLocation location, |
82 unsigned diag_id); | 83 unsigned diag_id); |
83 | 84 |
84 void ReportMissingDispatchMethod(RecordInfo* info, unsigned error); | 85 void ReportMissingDispatchMethod(RecordInfo* info, unsigned error); |
85 void ReportMissingDispatch(const clang::FunctionDecl* dispatch, | 86 void ReportMissingDispatch(const clang::FunctionDecl* dispatch, |
86 RecordInfo* receiver, | 87 RecordInfo* receiver, |
87 unsigned error); | 88 unsigned error); |
88 | 89 |
89 clang::CompilerInstance& instance_; | 90 clang::CompilerInstance& instance_; |
90 clang::DiagnosticsEngine& diagnostic_; | 91 clang::DiagnosticsEngine& diagnostic_; |
91 | 92 |
92 unsigned diag_class_must_left_mostly_derive_gc_; | 93 unsigned diag_class_must_left_mostly_derive_gc_; |
93 unsigned diag_class_requires_trace_method_; | 94 unsigned diag_class_requires_trace_method_; |
94 unsigned diag_base_requires_tracing_; | 95 unsigned diag_base_requires_tracing_; |
95 unsigned diag_fields_require_tracing_; | 96 unsigned diag_fields_require_tracing_; |
| 97 unsigned diag_fields_improperly_traced_; |
96 unsigned diag_class_contains_invalid_fields_; | 98 unsigned diag_class_contains_invalid_fields_; |
97 unsigned diag_class_contains_gc_root_; | 99 unsigned diag_class_contains_gc_root_; |
98 unsigned diag_class_requires_finalization_; | 100 unsigned diag_class_requires_finalization_; |
99 unsigned diag_class_does_not_require_finalization_; | 101 unsigned diag_class_does_not_require_finalization_; |
100 unsigned diag_finalizer_accesses_finalized_field_; | 102 unsigned diag_finalizer_accesses_finalized_field_; |
101 unsigned diag_finalizer_eagerly_finalized_field_; | 103 unsigned diag_finalizer_eagerly_finalized_field_; |
102 unsigned diag_overridden_non_virtual_trace_; | 104 unsigned diag_overridden_non_virtual_trace_; |
103 unsigned diag_missing_trace_dispatch_method_; | 105 unsigned diag_missing_trace_dispatch_method_; |
104 unsigned diag_missing_finalize_dispatch_method_; | 106 unsigned diag_missing_finalize_dispatch_method_; |
105 unsigned diag_virtual_and_manual_dispatch_; | 107 unsigned diag_virtual_and_manual_dispatch_; |
106 unsigned diag_missing_trace_dispatch_; | 108 unsigned diag_missing_trace_dispatch_; |
107 unsigned diag_missing_finalize_dispatch_; | 109 unsigned diag_missing_finalize_dispatch_; |
108 unsigned diag_derives_non_stack_allocated_; | 110 unsigned diag_derives_non_stack_allocated_; |
109 unsigned diag_class_overrides_new_; | 111 unsigned diag_class_overrides_new_; |
110 unsigned diag_class_declares_pure_virtual_trace_; | 112 unsigned diag_class_declares_pure_virtual_trace_; |
111 unsigned diag_left_most_base_must_be_polymorphic_; | 113 unsigned diag_left_most_base_must_be_polymorphic_; |
112 unsigned diag_base_class_must_declare_virtual_trace_; | 114 unsigned diag_base_class_must_declare_virtual_trace_; |
113 | 115 |
114 unsigned diag_base_requires_tracing_note_; | 116 unsigned diag_base_requires_tracing_note_; |
115 unsigned diag_field_requires_tracing_note_; | 117 unsigned diag_field_requires_tracing_note_; |
| 118 unsigned diag_field_should_not_be_traced_note_; |
116 unsigned diag_raw_ptr_to_gc_managed_class_note_; | 119 unsigned diag_raw_ptr_to_gc_managed_class_note_; |
117 unsigned diag_ref_ptr_to_gc_managed_class_note_; | 120 unsigned diag_ref_ptr_to_gc_managed_class_note_; |
118 unsigned diag_reference_ptr_to_gc_managed_class_note_; | 121 unsigned diag_reference_ptr_to_gc_managed_class_note_; |
119 unsigned diag_own_ptr_to_gc_managed_class_note_; | 122 unsigned diag_own_ptr_to_gc_managed_class_note_; |
| 123 unsigned diag_unique_ptr_to_gc_managed_class_note_; |
120 unsigned diag_member_to_gc_unmanaged_class_note_; | 124 unsigned diag_member_to_gc_unmanaged_class_note_; |
121 unsigned diag_stack_allocated_field_note_; | 125 unsigned diag_stack_allocated_field_note_; |
122 unsigned diag_member_in_unmanaged_class_note_; | 126 unsigned diag_member_in_unmanaged_class_note_; |
123 unsigned diag_part_object_to_gc_derived_class_note_; | 127 unsigned diag_part_object_to_gc_derived_class_note_; |
124 unsigned diag_part_object_contains_gc_root_note_; | 128 unsigned diag_part_object_contains_gc_root_note_; |
125 unsigned diag_field_contains_gc_root_note_; | 129 unsigned diag_field_contains_gc_root_note_; |
126 unsigned diag_finalized_field_note_; | 130 unsigned diag_finalized_field_note_; |
127 unsigned diag_eagerly_finalized_field_note_; | 131 unsigned diag_eagerly_finalized_field_note_; |
128 unsigned diag_user_declared_destructor_note_; | 132 unsigned diag_user_declared_destructor_note_; |
129 unsigned diag_user_declared_finalizer_note_; | 133 unsigned diag_user_declared_finalizer_note_; |
130 unsigned diag_base_requires_finalization_note_; | 134 unsigned diag_base_requires_finalization_note_; |
131 unsigned diag_field_requires_finalization_note_; | 135 unsigned diag_field_requires_finalization_note_; |
132 unsigned diag_overridden_non_virtual_trace_note_; | 136 unsigned diag_overridden_non_virtual_trace_note_; |
133 unsigned diag_manual_dispatch_method_note_; | 137 unsigned diag_manual_dispatch_method_note_; |
134 | 138 |
135 }; | 139 }; |
136 | 140 |
137 #endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ | 141 #endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_ |
OLD | NEW |