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