1f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//===--- LogDiagnosticPrinter.h - Log Diagnostic Client ---------*- C++ -*-===// 2f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// 3f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// The LLVM Compiler Infrastructure 4f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// 5f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// This file is distributed under the University of Illinois Open Source 6f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// License. See LICENSE.TXT for details. 7f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot// 8f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot//===----------------------------------------------------------------------===// 9f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 10f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#ifndef LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H 11f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#define LLVM_CLANG_FRONTEND_LOGDIAGNOSTICPRINTER_H 12f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 13f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "clang/Basic/Diagnostic.h" 14f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "clang/Basic/SourceLocation.h" 15f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/ADT/SmallVector.h" 16f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#include "llvm/ADT/StringRef.h" 17f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 18f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotnamespace clang { 19f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass DiagnosticOptions; 20f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LangOptions; 21f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 22f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotclass LogDiagnosticPrinter : public DiagnosticConsumer { 23f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot struct DiagEntry { 24f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The primary message line of the diagnostic. 25f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string Message; 26f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 27f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The source file name, if available. 28f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string Filename; 29f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 30f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The source file line number, if available. 31f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned Line; 32f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 33f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The source file column number, if available. 34f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned Column; 35f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 36f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The ID of the diagnostic. 37f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot unsigned DiagnosticID; 38f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 39f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The Option Flag for the diagnostic 40f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string WarningOption; 41f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 42f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot /// The level of the diagnostic. 43f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DiagnosticsEngine::Level DiagnosticLevel; 44f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot }; 45f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 46f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void EmitDiagEntry(llvm::raw_ostream &OS, 47f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const LogDiagnosticPrinter::DiagEntry &DE); 48f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 49f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // Conditional ownership (when StreamOwner is non-null, it's keeping OS 50f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // alive). We might want to replace this with a wrapper for conditional 51f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot // ownership eventually - it seems to pop up often enough. 52f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot raw_ostream &OS; 53f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::unique_ptr<raw_ostream> StreamOwner; 54f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const LangOptions *LangOpts; 55f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts; 56f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 57f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SourceLocation LastWarningLoc; 58f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot FullSourceLoc LastLoc; 59f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 60f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot SmallVector<DiagEntry, 8> Entries; 61f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 62f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string MainFilename; 63f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::string DwarfDebugFlags; 64f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 65f3014761c955345d6e05491608e73228d014afbandroid-build-team Robotpublic: 66f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LogDiagnosticPrinter(raw_ostream &OS, DiagnosticOptions *Diags, 67f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot std::unique_ptr<raw_ostream> StreamOwner); 68f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 69f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void setDwarfDebugFlags(StringRef Value) { 70f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot DwarfDebugFlags = Value; 71f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 72f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 73f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void BeginSourceFile(const LangOptions &LO, const Preprocessor *PP) override { 74f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot LangOpts = &LO; 75f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot } 76f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 77f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void EndSourceFile() override; 78f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 79f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel, 80f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot const Diagnostic &Info) override; 81f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot}; 82f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 83f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot} // end namespace clang 84f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot 85f3014761c955345d6e05491608e73228d014afbandroid-build-team Robot#endif 86