1*349cc55cSDimitry Andric //===- llvm/IR/DiagnosticPrinter.cpp - Diagnostic Printer -------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric // 90b57cec5SDimitry Andric // This file defines a diagnostic printer relying on raw_ostream. 100b57cec5SDimitry Andric // 110b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric #include "llvm/IR/DiagnosticPrinter.h" 140b57cec5SDimitry Andric #include "llvm/ADT/Twine.h" 150b57cec5SDimitry Andric #include "llvm/IR/Module.h" 160b57cec5SDimitry Andric #include "llvm/IR/Value.h" 170b57cec5SDimitry Andric #include "llvm/Support/SourceMgr.h" 180b57cec5SDimitry Andric #include "llvm/Support/raw_ostream.h" 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric using namespace llvm; 210b57cec5SDimitry Andric operator <<(char C)220b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(char C) { 230b57cec5SDimitry Andric Stream << C; 240b57cec5SDimitry Andric return *this; 250b57cec5SDimitry Andric } 260b57cec5SDimitry Andric operator <<(unsigned char C)270b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned char C) { 280b57cec5SDimitry Andric Stream << C; 290b57cec5SDimitry Andric return *this; 300b57cec5SDimitry Andric } 310b57cec5SDimitry Andric operator <<(signed char C)320b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(signed char C) { 330b57cec5SDimitry Andric Stream << C; 340b57cec5SDimitry Andric return *this; 350b57cec5SDimitry Andric } 360b57cec5SDimitry Andric operator <<(StringRef Str)370b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(StringRef Str) { 380b57cec5SDimitry Andric Stream << Str; 390b57cec5SDimitry Andric return *this; 400b57cec5SDimitry Andric } 410b57cec5SDimitry Andric operator <<(const char * Str)420b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const char *Str) { 430b57cec5SDimitry Andric Stream << Str; 440b57cec5SDimitry Andric return *this; 450b57cec5SDimitry Andric } 460b57cec5SDimitry Andric operator <<(const std::string & Str)470b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<( 480b57cec5SDimitry Andric const std::string &Str) { 490b57cec5SDimitry Andric Stream << Str; 500b57cec5SDimitry Andric return *this; 510b57cec5SDimitry Andric } 520b57cec5SDimitry Andric operator <<(unsigned long N)530b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned long N) { 540b57cec5SDimitry Andric Stream << N; 550b57cec5SDimitry Andric return *this; 560b57cec5SDimitry Andric } operator <<(long N)570b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long N) { 580b57cec5SDimitry Andric Stream << N; 590b57cec5SDimitry Andric return *this; 600b57cec5SDimitry Andric } 610b57cec5SDimitry Andric operator <<(unsigned long long N)620b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<( 630b57cec5SDimitry Andric unsigned long long N) { 640b57cec5SDimitry Andric Stream << N; 650b57cec5SDimitry Andric return *this; 660b57cec5SDimitry Andric } 670b57cec5SDimitry Andric operator <<(long long N)680b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long long N) { 690b57cec5SDimitry Andric Stream << N; 700b57cec5SDimitry Andric return *this; 710b57cec5SDimitry Andric } 720b57cec5SDimitry Andric operator <<(const void * P)730b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const void *P) { 740b57cec5SDimitry Andric Stream << P; 750b57cec5SDimitry Andric return *this; 760b57cec5SDimitry Andric } 770b57cec5SDimitry Andric operator <<(unsigned int N)780b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned int N) { 790b57cec5SDimitry Andric Stream << N; 800b57cec5SDimitry Andric return *this; 810b57cec5SDimitry Andric } 820b57cec5SDimitry Andric operator <<(int N)830b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(int N) { 840b57cec5SDimitry Andric Stream << N; 850b57cec5SDimitry Andric return *this; 860b57cec5SDimitry Andric } 870b57cec5SDimitry Andric operator <<(double N)880b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(double N) { 890b57cec5SDimitry Andric Stream << N; 900b57cec5SDimitry Andric return *this; 910b57cec5SDimitry Andric } 920b57cec5SDimitry Andric operator <<(const Twine & Str)930b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Twine &Str) { 940b57cec5SDimitry Andric Str.print(Stream); 950b57cec5SDimitry Andric return *this; 960b57cec5SDimitry Andric } 970b57cec5SDimitry Andric 980b57cec5SDimitry Andric // IR related types. operator <<(const Value & V)990b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Value &V) { 1000b57cec5SDimitry Andric Stream << V.getName(); 1010b57cec5SDimitry Andric return *this; 1020b57cec5SDimitry Andric } 1030b57cec5SDimitry Andric operator <<(const Module & M)1040b57cec5SDimitry AndricDiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Module &M) { 1050b57cec5SDimitry Andric Stream << M.getModuleIdentifier(); 1060b57cec5SDimitry Andric return *this; 1070b57cec5SDimitry Andric } 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andric // Other types. 1100b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream:: operator <<(const SMDiagnostic & Diag)1110b57cec5SDimitry Andricoperator<<(const SMDiagnostic &Diag) { 1120b57cec5SDimitry Andric // We don't have to print the SMDiagnostic kind, as the diagnostic severity 1130b57cec5SDimitry Andric // is printed by the diagnostic handler. 1140b57cec5SDimitry Andric Diag.print("", Stream, /*ShowColors=*/true, /*ShowKindLabel=*/false); 1150b57cec5SDimitry Andric return *this; 1160b57cec5SDimitry Andric } 117