Coverage Report

Created: 2023-05-31 04:38

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Frontend/LogDiagnosticPrinter.h
Line
Count
Source
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
17
namespace clang {
18
class DiagnosticOptions;
19
class LangOptions;
20
21
class 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
  IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
55
56
  SourceLocation LastWarningLoc;
57
  FullSourceLoc LastLoc;
58
59
  SmallVector<DiagEntry, 8> Entries;
60
61
  std::string MainFilename;
62
  std::string DwarfDebugFlags;
63
64
public:
65
  LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions *Diags,
66
                       std::unique_ptr<raw_ostream> StreamOwner);
67
68
13
  void setDwarfDebugFlags(StringRef Value) {
69
13
    DwarfDebugFlags = std::string(Value);
70
13
  }
71
72
10
  void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override {
73
10
    LangOpts = &LO;
74
10
  }
75
76
  void EndSourceFile() override;
77
78
  void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
79
                        const Diagnostic &Info) override;
80
};
81
82
} // end namespace clang
83
84
#endif