Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  85.