003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/include/clang/Frontend
usr
/
src
/
contrib
/
llvm-project
/
clang
/
include
/
clang
/
Frontend
/
📁
..
📄
ASTConsumers.h
(1.93 KB)
📄
ASTUnit.h
(34.09 KB)
📄
ChainedDiagnosticConsumer.h
(2.39 KB)
📄
CommandLineSourceLoc.h
(4.25 KB)
📄
CompilerInstance.h
(27.29 KB)
📄
CompilerInvocation.h
(8.85 KB)
📄
DependencyOutputOptions.h
(2.77 KB)
📄
DiagnosticRenderer.h
(6.69 KB)
📄
FrontendAction.h
(11.74 KB)
📄
FrontendActions.h
(9.39 KB)
📄
FrontendDiagnostic.h
(521 B)
📄
FrontendOptions.h
(13.21 KB)
📄
FrontendPluginRegistry.h
(877 B)
📄
LayoutOverrideSource.h
(2.08 KB)
📄
LogDiagnosticPrinter.h
(2.37 KB)
📄
MigratorOptions.h
(877 B)
📄
MultiplexConsumer.h
(3.58 KB)
📄
PCHContainerOperations.h
(527 B)
📄
PrecompiledPreamble.h
(11.83 KB)
📄
PreprocessorOutputOptions.h
(1.58 KB)
📄
SerializedDiagnosticPrinter.h
(1.41 KB)
📄
SerializedDiagnosticReader.h
(4.21 KB)
📄
SerializedDiagnostics.h
(1.47 KB)
📄
TextDiagnostic.h
(4.83 KB)
📄
TextDiagnosticBuffer.h
(2.25 KB)
📄
TextDiagnosticPrinter.h
(1.82 KB)
📄
Utils.h
(8.73 KB)
📄
VerifyDiagnosticConsumer.h
(11.4 KB)
Editing: DiagnosticRenderer.h
//===- DiagnosticRenderer.h - Diagnostic Pretty-Printing --------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This is a utility class that provides support for pretty-printing of // diagnostics. It is used to implement the different code paths which require // such functionality in a consistent way. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_FRONTEND_DIAGNOSTICRENDERER_H #define LLVM_CLANG_FRONTEND_DIAGNOSTICRENDERER_H #include "clang/Basic/Diagnostic.h" #include "clang/Basic/DiagnosticOptions.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/IntrusiveRefCntPtr.h" #include "llvm/ADT/PointerUnion.h" #include "llvm/ADT/StringRef.h" namespace clang { class LangOptions; class SourceManager; using DiagOrStoredDiag = llvm::PointerUnion<const Diagnostic *, const StoredDiagnostic *>; /// Class to encapsulate the logic for formatting a diagnostic message. /// /// Actual "printing" logic is implemented by subclasses. /// /// This class provides an interface for building and emitting /// diagnostic, including all of the macro backtraces, caret diagnostics, FixIt /// Hints, and code snippets. In the presence of macros this involves /// a recursive process, synthesizing notes for each macro expansion. /// /// A brief worklist: /// FIXME: Sink the recursive printing of template instantiations into this /// class. class DiagnosticRenderer { protected: const LangOptions &LangOpts; IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts; /// The location of the previous diagnostic if known. /// /// This will be invalid in cases where there is no (known) previous /// diagnostic location, or that location itself is invalid or comes from /// a different source manager than SM. SourceLocation LastLoc; /// The location of the last include whose stack was printed if known. /// /// Same restriction as LastLoc essentially, but tracking include stack /// root locations rather than diagnostic locations. SourceLocation LastIncludeLoc; /// The level of the last diagnostic emitted. /// /// The level of the last diagnostic emitted. Used to detect level changes /// which change the amount of information displayed. DiagnosticsEngine::Level LastLevel = DiagnosticsEngine::Ignored; DiagnosticRenderer(const LangOptions &LangOpts, DiagnosticOptions *DiagOpts); virtual ~DiagnosticRenderer(); virtual void emitDiagnosticMessage(FullSourceLoc Loc, PresumedLoc PLoc, DiagnosticsEngine::Level Level, StringRef Message, ArrayRef<CharSourceRange> Ranges, DiagOrStoredDiag Info) = 0; virtual void emitDiagnosticLoc(FullSourceLoc Loc, PresumedLoc PLoc, DiagnosticsEngine::Level Level, ArrayRef<CharSourceRange> Ranges) = 0; virtual void emitCodeContext(FullSourceLoc Loc, DiagnosticsEngine::Level Level, SmallVectorImpl<CharSourceRange> &Ranges, ArrayRef<FixItHint> Hints) = 0; virtual void emitIncludeLocation(FullSourceLoc Loc, PresumedLoc PLoc) = 0; virtual void emitImportLocation(FullSourceLoc Loc, PresumedLoc PLoc, StringRef ModuleName) = 0; virtual void emitBuildingModuleLocation(FullSourceLoc Loc, PresumedLoc PLoc, StringRef ModuleName) = 0; virtual void beginDiagnostic(DiagOrStoredDiag D, DiagnosticsEngine::Level Level) {} virtual void endDiagnostic(DiagOrStoredDiag D, DiagnosticsEngine::Level Level) {} private: void emitBasicNote(StringRef Message); void emitIncludeStack(FullSourceLoc Loc, PresumedLoc PLoc, DiagnosticsEngine::Level Level); void emitIncludeStackRecursively(FullSourceLoc Loc); void emitImportStack(FullSourceLoc Loc); void emitImportStackRecursively(FullSourceLoc Loc, StringRef ModuleName); void emitModuleBuildStack(const SourceManager &SM); void emitCaret(FullSourceLoc Loc, DiagnosticsEngine::Level Level, ArrayRef<CharSourceRange> Ranges, ArrayRef<FixItHint> Hints); void emitSingleMacroExpansion(FullSourceLoc Loc, DiagnosticsEngine::Level Level, ArrayRef<CharSourceRange> Ranges); void emitMacroExpansions(FullSourceLoc Loc, DiagnosticsEngine::Level Level, ArrayRef<CharSourceRange> Ranges, ArrayRef<FixItHint> Hints); public: /// Emit a diagnostic. /// /// This is the primary entry point for emitting diagnostic messages. /// It handles formatting and rendering the message as well as any ancillary /// information needed based on macros whose expansions impact the /// diagnostic. /// /// \param Loc The location for this caret. /// \param Level The level of the diagnostic to be emitted. /// \param Message The diagnostic message to emit. /// \param Ranges The underlined ranges for this code snippet. /// \param FixItHints The FixIt hints active for this diagnostic. void emitDiagnostic(FullSourceLoc Loc, DiagnosticsEngine::Level Level, StringRef Message, ArrayRef<CharSourceRange> Ranges, ArrayRef<FixItHint> FixItHints, DiagOrStoredDiag D = (Diagnostic *)nullptr); void emitStoredDiagnostic(StoredDiagnostic &Diag); }; /// Subclass of DiagnosticRender that turns all subdiagostics into explicit /// notes. It is up to subclasses to further define the behavior. class DiagnosticNoteRenderer : public DiagnosticRenderer { public: DiagnosticNoteRenderer(const LangOptions &LangOpts, DiagnosticOptions *DiagOpts) : DiagnosticRenderer(LangOpts, DiagOpts) {} ~DiagnosticNoteRenderer() override; void emitIncludeLocation(FullSourceLoc Loc, PresumedLoc PLoc) override; void emitImportLocation(FullSourceLoc Loc, PresumedLoc PLoc, StringRef ModuleName) override; void emitBuildingModuleLocation(FullSourceLoc Loc, PresumedLoc PLoc, StringRef ModuleName) override; virtual void emitNote(FullSourceLoc Loc, StringRef Message) = 0; }; } // namespace clang #endif // LLVM_CLANG_FRONTEND_DIAGNOSTICRENDERER_H
Upload File
Create Folder