Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
  void setDwarfDebugFlags(StringRef Value) {
69
    DwarfDebugFlags = std::string(Value);
70
  }
71
 
72
  void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override {
73
    LangOpts = &LO;
74
  }
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