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