1 //===- llvm/Support/DiagnosticPrinter.h - Diagnostic Printer ----*- C++ -*-===// 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 // This file declares the main interface for printer backend diagnostic. 11 // 12 // Clients of the backend diagnostics should overload this interface based 13 // on their needs. 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_IR_DIAGNOSTICPRINTER_H 17 #define LLVM_IR_DIAGNOSTICPRINTER_H 18 19 #include <string> 20 21 namespace llvm { 22 23 // Forward declarations. 24 class Module; 25 class raw_ostream; 26 class SMDiagnostic; 27 class StringRef; 28 class Twine; 29 class Value; 30 31 /// \brief Interface for custom diagnostic printing. 32 class DiagnosticPrinter { 33 public: 34 virtual ~DiagnosticPrinter() = default; 35 36 // Simple types. 37 virtual DiagnosticPrinter &operator<<(char C) = 0; 38 virtual DiagnosticPrinter &operator<<(unsigned char C) = 0; 39 virtual DiagnosticPrinter &operator<<(signed char C) = 0; 40 virtual DiagnosticPrinter &operator<<(StringRef Str) = 0; 41 virtual DiagnosticPrinter &operator<<(const char *Str) = 0; 42 virtual DiagnosticPrinter &operator<<(const std::string &Str) = 0; 43 virtual DiagnosticPrinter &operator<<(unsigned long N) = 0; 44 virtual DiagnosticPrinter &operator<<(long N) = 0; 45 virtual DiagnosticPrinter &operator<<(unsigned long long N) = 0; 46 virtual DiagnosticPrinter &operator<<(long long N) = 0; 47 virtual DiagnosticPrinter &operator<<(const void *P) = 0; 48 virtual DiagnosticPrinter &operator<<(unsigned int N) = 0; 49 virtual DiagnosticPrinter &operator<<(int N) = 0; 50 virtual DiagnosticPrinter &operator<<(double N) = 0; 51 virtual DiagnosticPrinter &operator<<(const Twine &Str) = 0; 52 53 // IR related types. 54 virtual DiagnosticPrinter &operator<<(const Value &V) = 0; 55 virtual DiagnosticPrinter &operator<<(const Module &M) = 0; 56 57 // Other types. 58 virtual DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) = 0; 59 }; 60 61 /// \brief Basic diagnostic printer that uses an underlying raw_ostream. 62 class DiagnosticPrinterRawOStream : public DiagnosticPrinter { 63 protected: 64 raw_ostream &Stream; 65 66 public: 67 DiagnosticPrinterRawOStream(raw_ostream &Stream) : Stream(Stream) {} 68 69 // Simple types. 70 DiagnosticPrinter &operator<<(char C) override; 71 DiagnosticPrinter &operator<<(unsigned char C) override; 72 DiagnosticPrinter &operator<<(signed char C) override; 73 DiagnosticPrinter &operator<<(StringRef Str) override; 74 DiagnosticPrinter &operator<<(const char *Str) override; 75 DiagnosticPrinter &operator<<(const std::string &Str) override; 76 DiagnosticPrinter &operator<<(unsigned long N) override; 77 DiagnosticPrinter &operator<<(long N) override; 78 DiagnosticPrinter &operator<<(unsigned long long N) override; 79 DiagnosticPrinter &operator<<(long long N) override; 80 DiagnosticPrinter &operator<<(const void *P) override; 81 DiagnosticPrinter &operator<<(unsigned int N) override; 82 DiagnosticPrinter &operator<<(int N) override; 83 DiagnosticPrinter &operator<<(double N) override; 84 DiagnosticPrinter &operator<<(const Twine &Str) override; 85 86 // IR related types. 87 DiagnosticPrinter &operator<<(const Value &V) override; 88 DiagnosticPrinter &operator<<(const Module &M) override; 89 90 // Other types. 91 DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) override; 92 }; 93 94 } // end namespace llvm 95 96 #endif // LLVM_IR_DIAGNOSTICPRINTER_H 97