• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //===--- SerializedDiagnosticPrinter.h - Serializer for diagnostics -------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTIC_PRINTER_H_
11 #define LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTIC_PRINTER_H_
12 
13 #include "clang/Basic/LLVM.h"
14 #include "llvm/Bitcode/BitstreamWriter.h"
15 
16 namespace llvm {
17 class raw_ostream;
18 }
19 
20 namespace clang {
21 class DiagnosticConsumer;
22 class DiagnosticsEngine;
23 class DiagnosticOptions;
24 
25 namespace serialized_diags {
26 
27 enum BlockIDs {
28   /// \brief A top-level block which represents any meta data associated
29   /// with the diagostics, including versioning of the format.
30   BLOCK_META = llvm::bitc::FIRST_APPLICATION_BLOCKID,
31 
32   /// \brief The this block acts as a container for all the information
33   /// for a specific diagnostic.
34   BLOCK_DIAG
35 };
36 
37 enum RecordIDs {
38   RECORD_VERSION = 1,
39   RECORD_DIAG,
40   RECORD_SOURCE_RANGE,
41   RECORD_DIAG_FLAG,
42   RECORD_CATEGORY,
43   RECORD_FILENAME,
44   RECORD_FIXIT,
45   RECORD_FIRST = RECORD_VERSION,
46   RECORD_LAST = RECORD_FIXIT
47 };
48 
49 /// A stable version of DiagnosticIDs::Level.
50 ///
51 /// Do not change the order of values in this enum, and please increment the
52 /// serialized diagnostics version number when you add to it.
53 enum Level {
54   Ignored = 0,
55   Note,
56   Warning,
57   Error,
58   Fatal,
59   Remark
60 };
61 
62 /// \brief Returns a DiagnosticConsumer that serializes diagnostics to
63 ///  a bitcode file.
64 ///
65 /// The created DiagnosticConsumer is designed for quick and lightweight
66 /// transfer of of diagnostics to the enclosing build system (e.g., an IDE).
67 /// This allows wrapper tools for Clang to get diagnostics from Clang
68 /// (via libclang) without needing to parse Clang's command line output.
69 ///
70 DiagnosticConsumer *create(raw_ostream *OS,
71                            DiagnosticOptions *diags);
72 
73 } // end serialized_diags namespace
74 } // end clang namespace
75 
76 #endif
77