17800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//===--- SerializedDiagnosticPrinter.h - Serializer for diagnostics -------===//
27800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//
37800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//                     The LLVM Compiler Infrastructure
47800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//
57800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek// This file is distributed under the University of Illinois Open Source
67800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek// License. See LICENSE.TXT for details.
77800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//
87800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek//===----------------------------------------------------------------------===//
97800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
107800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek#ifndef LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTIC_PRINTER_H_
117800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek#define LLVM_CLANG_FRONTEND_SERIALIZE_DIAGNOSTIC_PRINTER_H_
127800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
13cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko#include "clang/Basic/LLVM.h"
14fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek#include "llvm/Bitcode/BitstreamWriter.h"
15fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek
167800212ef29be314d55814e8dcc568ff8beed106Ted Kremeneknamespace llvm {
177800212ef29be314d55814e8dcc568ff8beed106Ted Kremenekclass raw_ostream;
187800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek}
197800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
207800212ef29be314d55814e8dcc568ff8beed106Ted Kremeneknamespace clang {
217800212ef29be314d55814e8dcc568ff8beed106Ted Kremenekclass DiagnosticConsumer;
227800212ef29be314d55814e8dcc568ff8beed106Ted Kremenekclass DiagnosticsEngine;
232a76410c0a23a6feb98d0f13e9c8bfa0638d3adfTed Kremenekclass DiagnosticOptions;
247800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
257800212ef29be314d55814e8dcc568ff8beed106Ted Kremeneknamespace serialized_diags {
26fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek
27fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenekenum BlockIDs {
280b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  /// \brief A top-level block which represents any meta data associated
290b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  /// with the diagostics, including versioning of the format.
300b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  BLOCK_META = llvm::bitc::FIRST_APPLICATION_BLOCKID,
310b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek
320b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  /// \brief The this block acts as a container for all the information
330b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  /// for a specific diagnostic.
340b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  BLOCK_DIAG
35fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek};
36fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek
37fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenekenum RecordIDs {
380b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  RECORD_VERSION = 1,
390b69aa856308f6b35f8b96ef269a482558f2966bTed Kremenek  RECORD_DIAG,
402a20b4fac5d06e2afc4980e7ef1b659c39c27c7bTed Kremenek  RECORD_SOURCE_RANGE,
41fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek  RECORD_DIAG_FLAG,
42fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek  RECORD_CATEGORY,
4396dcadec26244e028d59287ea1b249802c8fc2bcTed Kremenek  RECORD_FILENAME,
44153221717e39ce41323d5bc6b8b8bf130923c1bdTed Kremenek  RECORD_FIXIT,
45153221717e39ce41323d5bc6b8b8bf130923c1bdTed Kremenek  RECORD_FIRST = RECORD_VERSION,
46153221717e39ce41323d5bc6b8b8bf130923c1bdTed Kremenek  RECORD_LAST = RECORD_FIXIT
47fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek};
48fdd0ced001babd4e65fb909cc2f847df53faf764Ted Kremenek
49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// A stable version of DiagnosticIDs::Level.
50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines///
51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// Do not change the order of values in this enum, and please increment the
52651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines/// serialized diagnostics version number when you add to it.
53651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesenum Level {
54651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Ignored = 0,
55651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Note,
56651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Warning,
57651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Error,
58651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Fatal,
59651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines  Remark
60651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines};
61651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines
627800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek/// \brief Returns a DiagnosticConsumer that serializes diagnostics to
637800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek///  a bitcode file.
647800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek///
657800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek/// The created DiagnosticConsumer is designed for quick and lightweight
667800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek/// transfer of of diagnostics to the enclosing build system (e.g., an IDE).
677800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek/// This allows wrapper tools for Clang to get diagnostics from Clang
687800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek/// (via libclang) without needing to parse Clang's command line output.
697800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek///
70cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri GribenkoDiagnosticConsumer *create(raw_ostream *OS,
7102c23ebf41ae2f70da0ba7337e05c51fbfe35f7fDouglas Gregor                           DiagnosticOptions *diags);
727800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
737800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek} // end serialized_diags namespace
747800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek} // end clang namespace
757800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek
767800212ef29be314d55814e8dcc568ff8beed106Ted Kremenek#endif
77