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