1//===--- LogDiagnosticPrinter.h - Log Diagnostic Client ---------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H
10#define LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H
11
12#include "clang/Basic/Diagnostic.h"
13#include "clang/Basic/SourceLocation.h"
14#include "llvm/ADT/SmallVector.h"
15#include "llvm/ADT/StringRef.h"
16
17namespace clang {
18class DiagnosticOptions;
19class LangOptions;
20
21class LogDiagnosticPrinter : public DiagnosticConsumer {
22 struct DiagEntry {
23 /// The primary message line of the diagnostic.
24 std::string Message;
25
26 /// The source file name, if available.
27 std::string Filename;
28
29 /// The source file line number, if available.
30 unsigned Line;
31
32 /// The source file column number, if available.
33 unsigned Column;
34
35 /// The ID of the diagnostic.
36 unsigned DiagnosticID;
37
38 /// The Option Flag for the diagnostic
39 std::string WarningOption;
40
41 /// The level of the diagnostic.
42 DiagnosticsEngine::Level DiagnosticLevel;
43 };
44
45 void EmitDiagEntry(llvm::raw_ostream &OS,
46 const LogDiagnosticPrinter::DiagEntry &DE);
47
48 // Conditional ownership (when StreamOwner is non-null, it's keeping OS
49 // alive). We might want to replace this with a wrapper for conditional
50 // ownership eventually - it seems to pop up often enough.
51 raw_ostream &OS;
52 std::unique_ptr<raw_ostream> StreamOwner;
53 const LangOptions *LangOpts;
54
55 SourceLocation LastWarningLoc;
56 FullSourceLoc LastLoc;
57
58 SmallVector<DiagEntry, 8> Entries;
59
60 std::string MainFilename;
61 std::string DwarfDebugFlags;
62
63public:
64 LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions &DiagOpts,
65 std::unique_ptr<raw_ostream> StreamOwner);
66
67 void setDwarfDebugFlags(StringRef Value) {
68 DwarfDebugFlags = std::string(Value);
69 }
70
71 void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override {
72 LangOpts = &LO;
73 }
74
75 void EndSourceFile() override;
76
77 void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
78 const Diagnostic &Info) override;
79};
80
81} // end namespace clang
82
83#endif
84

Provided by KDAB

Privacy Policy
Improve your Profiling and Debugging skills
Find out more

source code of clang/include/clang/Frontend/LogDiagnosticPrinter.h