| Index: tools/clang/blink_gc_plugin/DiagnosticsReporter.h
|
| diff --git a/tools/clang/blink_gc_plugin/DiagnosticsReporter.h b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2f9076ec7b9d610726337585a70f7cb963c7e398
|
| --- /dev/null
|
| +++ b/tools/clang/blink_gc_plugin/DiagnosticsReporter.h
|
| @@ -0,0 +1,137 @@
|
| +// Copyright 2016 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 TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
|
| +#define TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
|
| +
|
| +#include "CheckFieldsVisitor.h"
|
| +#include "CheckFinalizerVisitor.h"
|
| +#include "CheckGCRootsVisitor.h"
|
| +#include "Config.h"
|
| +#include "clang/AST/AST.h"
|
| +#include "clang/AST/ASTConsumer.h"
|
| +#include "clang/Basic/Diagnostic.h"
|
| +#include "clang/Frontend/CompilerInstance.h"
|
| +
|
| +class RecordInfo;
|
| +
|
| +// All error/warning reporting methods under one roof.
|
| +//
|
| +class DiagnosticsReporter {
|
| + public:
|
| + explicit DiagnosticsReporter(clang::CompilerInstance&);
|
| +
|
| + bool hasErrorOccurred() const;
|
| + clang::DiagnosticsEngine::Level getErrorLevel() const;
|
| +
|
| + void ClassMustLeftMostlyDeriveGC(RecordInfo* info);
|
| + void ClassRequiresTraceMethod(RecordInfo* info);
|
| + void BaseRequiresTracing(RecordInfo* derived,
|
| + clang::CXXMethodDecl* trace,
|
| + clang::CXXRecordDecl* base);
|
| + void FieldsRequireTracing(RecordInfo* info,
|
| + clang::CXXMethodDecl* trace);
|
| + void ClassContainsInvalidFields(
|
| + RecordInfo* info,
|
| + const CheckFieldsVisitor::Errors& errors);
|
| + void ClassContainsGCRoots(RecordInfo* info,
|
| + const CheckGCRootsVisitor::Errors& errors);
|
| + void FinalizerAccessesFinalizedFields(
|
| + clang::CXXMethodDecl* dtor,
|
| + const CheckFinalizerVisitor::Errors& errors);
|
| + void ClassRequiresFinalization(RecordInfo* info);
|
| + void ClassDoesNotRequireFinalization(RecordInfo* info);
|
| + void ClassMustDeclareGCMixinTraceMethod(RecordInfo* info);
|
| + void OverriddenNonVirtualTrace(RecordInfo* info,
|
| + clang::CXXMethodDecl* trace,
|
| + clang::CXXMethodDecl* overridden);
|
| + void MissingTraceDispatchMethod(RecordInfo* info);
|
| + void MissingFinalizeDispatchMethod(RecordInfo* info);
|
| + void VirtualAndManualDispatch(RecordInfo* info,
|
| + clang::CXXMethodDecl* dispatch);
|
| + void MissingTraceDispatch(const clang::FunctionDecl* dispatch,
|
| + RecordInfo* receiver);
|
| + void MissingFinalizeDispatch(const clang::FunctionDecl* dispatch,
|
| + RecordInfo* receiver);
|
| + void DerivesNonStackAllocated(RecordInfo* info, BasePoint* base);
|
| + void ClassOverridesNew(RecordInfo* info, clang::CXXMethodDecl* newop);
|
| + void ClassDeclaresPureVirtualTrace(RecordInfo* info,
|
| + clang::CXXMethodDecl* trace);
|
| + void LeftMostBaseMustBePolymorphic(RecordInfo* derived,
|
| + clang::CXXRecordDecl* base);
|
| + void BaseClassMustDeclareVirtualTrace(RecordInfo* derived,
|
| + clang::CXXRecordDecl* base);
|
| +
|
| + void NoteManualDispatchMethod(clang::CXXMethodDecl* dispatch);
|
| + void NoteBaseRequiresTracing(BasePoint* base);
|
| + void NoteFieldRequiresTracing(RecordInfo* holder, clang::FieldDecl* field);
|
| + void NotePartObjectContainsGCRoot(FieldPoint* point);
|
| + void NoteFieldContainsGCRoot(FieldPoint* point);
|
| + void NoteUserDeclaredDestructor(clang::CXXMethodDecl* dtor);
|
| + void NoteUserDeclaredFinalizer(clang::CXXMethodDecl* dtor);
|
| + void NoteBaseRequiresFinalization(BasePoint* base);
|
| + void NoteFieldRequiresFinalization(FieldPoint* field);
|
| + void NoteField(FieldPoint* point, unsigned note);
|
| + void NoteField(clang::FieldDecl* field, unsigned note);
|
| + void NoteOverriddenNonVirtualTrace(clang::CXXMethodDecl* overridden);
|
| +
|
| + private:
|
| + clang::DiagnosticBuilder ReportDiagnostic(
|
| + clang::SourceLocation location,
|
| + unsigned diag_id);
|
| +
|
| + void ReportMissingDispatchMethod(RecordInfo* info, unsigned error);
|
| + void ReportMissingDispatch(const clang::FunctionDecl* dispatch,
|
| + RecordInfo* receiver,
|
| + unsigned error);
|
| +
|
| + clang::CompilerInstance& instance_;
|
| + clang::DiagnosticsEngine& diagnostic_;
|
| +
|
| + unsigned diag_class_must_left_mostly_derive_gc_;
|
| + unsigned diag_class_requires_trace_method_;
|
| + unsigned diag_base_requires_tracing_;
|
| + unsigned diag_fields_require_tracing_;
|
| + unsigned diag_class_contains_invalid_fields_;
|
| + unsigned diag_class_contains_gc_root_;
|
| + unsigned diag_class_requires_finalization_;
|
| + unsigned diag_class_does_not_require_finalization_;
|
| + unsigned diag_finalizer_accesses_finalized_field_;
|
| + unsigned diag_finalizer_eagerly_finalized_field_;
|
| + unsigned diag_overridden_non_virtual_trace_;
|
| + unsigned diag_missing_trace_dispatch_method_;
|
| + unsigned diag_missing_finalize_dispatch_method_;
|
| + unsigned diag_virtual_and_manual_dispatch_;
|
| + unsigned diag_missing_trace_dispatch_;
|
| + unsigned diag_missing_finalize_dispatch_;
|
| + unsigned diag_derives_non_stack_allocated_;
|
| + unsigned diag_class_overrides_new_;
|
| + unsigned diag_class_declares_pure_virtual_trace_;
|
| + unsigned diag_left_most_base_must_be_polymorphic_;
|
| + unsigned diag_base_class_must_declare_virtual_trace_;
|
| +
|
| + unsigned diag_base_requires_tracing_note_;
|
| + unsigned diag_field_requires_tracing_note_;
|
| + unsigned diag_raw_ptr_to_gc_managed_class_note_;
|
| + unsigned diag_ref_ptr_to_gc_managed_class_note_;
|
| + unsigned diag_reference_ptr_to_gc_managed_class_note_;
|
| + unsigned diag_own_ptr_to_gc_managed_class_note_;
|
| + unsigned diag_member_to_gc_unmanaged_class_note_;
|
| + unsigned diag_stack_allocated_field_note_;
|
| + unsigned diag_member_in_unmanaged_class_note_;
|
| + unsigned diag_part_object_to_gc_derived_class_note_;
|
| + unsigned diag_part_object_contains_gc_root_note_;
|
| + unsigned diag_field_contains_gc_root_note_;
|
| + unsigned diag_finalized_field_note_;
|
| + unsigned diag_eagerly_finalized_field_note_;
|
| + unsigned diag_user_declared_destructor_note_;
|
| + unsigned diag_user_declared_finalizer_note_;
|
| + unsigned diag_base_requires_finalization_note_;
|
| + unsigned diag_field_requires_finalization_note_;
|
| + unsigned diag_overridden_non_virtual_trace_note_;
|
| + unsigned diag_manual_dispatch_method_note_;
|
| +
|
| +};
|
| +
|
| +#endif // TOOLS_BLINK_GC_PLUGIN_DIAGNOSTICS_REPORTER_H_
|
|
|