xref: /freebsd/contrib/llvm-project/llvm/lib/IR/DiagnosticPrinter.cpp (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
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 Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(char C) {
230b57cec5SDimitry Andric   Stream << C;
240b57cec5SDimitry Andric   return *this;
250b57cec5SDimitry Andric }
260b57cec5SDimitry Andric 
operator <<(unsigned char C)270b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned char C) {
280b57cec5SDimitry Andric   Stream << C;
290b57cec5SDimitry Andric   return *this;
300b57cec5SDimitry Andric }
310b57cec5SDimitry Andric 
operator <<(signed char C)320b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(signed char C) {
330b57cec5SDimitry Andric   Stream << C;
340b57cec5SDimitry Andric   return *this;
350b57cec5SDimitry Andric }
360b57cec5SDimitry Andric 
operator <<(StringRef Str)370b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(StringRef Str) {
380b57cec5SDimitry Andric   Stream << Str;
390b57cec5SDimitry Andric   return *this;
400b57cec5SDimitry Andric }
410b57cec5SDimitry Andric 
operator <<(const char * Str)420b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const char *Str) {
430b57cec5SDimitry Andric   Stream << Str;
440b57cec5SDimitry Andric   return *this;
450b57cec5SDimitry Andric }
460b57cec5SDimitry Andric 
operator <<(const std::string & Str)470b57cec5SDimitry Andric DiagnosticPrinter &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 Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned long N) {
540b57cec5SDimitry Andric   Stream << N;
550b57cec5SDimitry Andric   return *this;
560b57cec5SDimitry Andric }
operator <<(long N)570b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long N) {
580b57cec5SDimitry Andric   Stream << N;
590b57cec5SDimitry Andric   return *this;
600b57cec5SDimitry Andric }
610b57cec5SDimitry Andric 
operator <<(unsigned long long N)620b57cec5SDimitry Andric DiagnosticPrinter &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 Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long long N) {
690b57cec5SDimitry Andric   Stream << N;
700b57cec5SDimitry Andric   return *this;
710b57cec5SDimitry Andric }
720b57cec5SDimitry Andric 
operator <<(const void * P)730b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const void *P) {
740b57cec5SDimitry Andric   Stream << P;
750b57cec5SDimitry Andric   return *this;
760b57cec5SDimitry Andric }
770b57cec5SDimitry Andric 
operator <<(unsigned int N)780b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned int N) {
790b57cec5SDimitry Andric   Stream << N;
800b57cec5SDimitry Andric   return *this;
810b57cec5SDimitry Andric }
820b57cec5SDimitry Andric 
operator <<(int N)830b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(int N) {
840b57cec5SDimitry Andric   Stream << N;
850b57cec5SDimitry Andric   return *this;
860b57cec5SDimitry Andric }
870b57cec5SDimitry Andric 
operator <<(double N)880b57cec5SDimitry Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(double N) {
890b57cec5SDimitry Andric   Stream << N;
900b57cec5SDimitry Andric   return *this;
910b57cec5SDimitry Andric }
920b57cec5SDimitry Andric 
operator <<(const Twine & Str)930b57cec5SDimitry Andric DiagnosticPrinter &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 Andric DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Value &V) {
1000b57cec5SDimitry Andric   Stream << V.getName();
1010b57cec5SDimitry Andric   return *this;
1020b57cec5SDimitry Andric }
1030b57cec5SDimitry Andric 
operator <<(const Module & M)1040b57cec5SDimitry Andric DiagnosticPrinter &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 Andric operator<<(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