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

Side by Side Diff: tools/clang/blink_gc_plugin/DiagnosticsReporter.h

Issue 1926863002: GC plugin: split out reporting of errors/warnings. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: whitespace Created 4 years, 7 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #ifndef TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
6 #define TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
7
8 #include "CheckFieldsVisitor.h"
9 #include "CheckFinalizerVisitor.h"
10 #include "CheckGCRootsVisitor.h"
11 #include "Config.h"
12 #include "clang/AST/AST.h"
13 #include "clang/AST/ASTConsumer.h"
14 #include "clang/Basic/Diagnostic.h"
15 #include "clang/Frontend/CompilerInstance.h"
16
17 class RecordInfo;
18
19 // All error/warning reporting methods under one roof.
20 //
21 class DiagnosticsReporter {
22 public:
23 explicit DiagnosticsReporter(clang::CompilerInstance&);
24
25 bool hasErrorOccurred() const;
26 clang::DiagnosticsEngine::Level getErrorLevel() const;
27
28 void ClassMustLeftMostlyDeriveGC(RecordInfo* info);
29 void ClassRequiresTraceMethod(RecordInfo* info);
30 void BaseRequiresTracing(RecordInfo* derived,
31 clang::CXXMethodDecl* trace,
32 clang::CXXRecordDecl* base);
33 void FieldsRequireTracing(RecordInfo* info,
34 clang::CXXMethodDecl* trace);
35 void ClassContainsInvalidFields(
36 RecordInfo* info,
37 const CheckFieldsVisitor::Errors& errors);
38 void ClassContainsGCRoots(RecordInfo* info,
39 const CheckGCRootsVisitor::Errors& errors);
40 void FinalizerAccessesFinalizedFields(
41 clang::CXXMethodDecl* dtor,
42 const CheckFinalizerVisitor::Errors& errors);
43 void ClassRequiresFinalization(RecordInfo* info);
44 void ClassDoesNotRequireFinalization(RecordInfo* info);
45 void ClassMustDeclareGCMixinTraceMethod(RecordInfo* info);
46 void OverriddenNonVirtualTrace(RecordInfo* info,
47 clang::CXXMethodDecl* trace,
48 clang::CXXMethodDecl* overridden);
49 void MissingTraceDispatchMethod(RecordInfo* info);
50 void MissingFinalizeDispatchMethod(RecordInfo* info);
51 void VirtualAndManualDispatch(RecordInfo* info,
52 clang::CXXMethodDecl* dispatch);
53 void MissingTraceDispatch(const clang::FunctionDecl* dispatch,
54 RecordInfo* receiver);
55 void MissingFinalizeDispatch(const clang::FunctionDecl* dispatch,
56 RecordInfo* receiver);
57 void DerivesNonStackAllocated(RecordInfo* info, BasePoint* base);
58 void ClassOverridesNew(RecordInfo* info, clang::CXXMethodDecl* newop);
59 void ClassDeclaresPureVirtualTrace(RecordInfo* info,
60 clang::CXXMethodDecl* trace);
61 void LeftMostBaseMustBePolymorphic(RecordInfo* derived,
62 clang::CXXRecordDecl* base);
63 void BaseClassMustDeclareVirtualTrace(RecordInfo* derived,
64 clang::CXXRecordDecl* base);
65
66 void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch);
67 void NoteBaseRequiresTracing(BasePoint* base);
68 void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field);
69 void NotePartObjectContainsGCRoot(FieldPoint* point);
70 void NoteFieldContainsGCRoot(FieldPoint* point);
71 void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor);
72 void NoteUserDeclaredFinalizer(clang::CXXMethodDecl* dtor);
73 void NoteBaseRequiresFinalization(BasePoint* base);
74 void NoteFieldRequiresFinalization(FieldPoint* field);
75 void NoteField(FieldPoint* point, unsigned note);
76 void NoteField(clang::FieldDecl* field, unsigned note);
77 void NoteOverriddenNonVirtualTrace(clang::CXXMethodDecl* overridden);
78
79 private:
80 clang::DiagnosticBuilder ReportDiagnostic(
81 clang::SourceLocation location,
82 unsigned diag_id);
83
84 void ReportMissingDispatchMethod(RecordInfo* info, unsigned error);
85 void ReportMissingDispatch(const clang::FunctionDecl* dispatch,
86 RecordInfo* receiver,
87 unsigned error);
88
89 clang::CompilerInstance& instance_;
90 clang::DiagnosticsEngine& diagnostic_;
91
92 unsigned diag_class_must_left_mostly_derive_gc_;
93 unsigned diag_class_requires_trace_method_;
94 unsigned diag_base_requires_tracing_;
95 unsigned diag_fields_require_tracing_;
96 unsigned diag_class_contains_invalid_fields_;
97 unsigned diag_class_contains_gc_root_;
98 unsigned diag_class_requires_finalization_;
99 unsigned diag_class_does_not_require_finalization_;
100 unsigned diag_finalizer_accesses_finalized_field_;
101 unsigned diag_finalizer_eagerly_finalized_field_;
102 unsigned diag_overridden_non_virtual_trace_;
103 unsigned diag_missing_trace_dispatch_method_;
104 unsigned diag_missing_finalize_dispatch_method_;
105 unsigned diag_virtual_and_manual_dispatch_;
106 unsigned diag_missing_trace_dispatch_;
107 unsigned diag_missing_finalize_dispatch_;
108 unsigned diag_derives_non_stack_allocated_;
109 unsigned diag_class_overrides_new_;
110 unsigned diag_class_declares_pure_virtual_trace_;
111 unsigned diag_left_most_base_must_be_polymorphic_;
112 unsigned diag_base_class_must_declare_virtual_trace_;
113
114 unsigned diag_base_requires_tracing_note_;
115 unsigned diag_field_requires_tracing_note_;
116 unsigned diag_raw_ptr_to_gc_managed_class_note_;
117 unsigned diag_ref_ptr_to_gc_managed_class_note_;
118 unsigned diag_reference_ptr_to_gc_managed_class_note_;
119 unsigned diag_own_ptr_to_gc_managed_class_note_;
120 unsigned diag_member_to_gc_unmanaged_class_note_;
121 unsigned diag_stack_allocated_field_note_;
122 unsigned diag_member_in_unmanaged_class_note_;
123 unsigned diag_part_object_to_gc_derived_class_note_;
124 unsigned diag_part_object_contains_gc_root_note_;
125 unsigned diag_field_contains_gc_root_note_;
126 unsigned diag_finalized_field_note_;
127 unsigned diag_eagerly_finalized_field_note_;
128 unsigned diag_user_declared_destructor_note_;
129 unsigned diag_user_declared_finalizer_note_;
130 unsigned diag_base_requires_finalization_note_;
131 unsigned diag_field_requires_finalization_note_;
132 unsigned diag_overridden_non_virtual_trace_note_;
133 unsigned diag_manual_dispatch_method_note_;
134
135 };
136
137 #endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
OLDNEW
« no previous file with comments | « tools/clang/blink_gc_plugin/CheckFieldsVisitor.cpp ('k') | tools/clang/blink_gc_plugin/DiagnosticsReporter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698