122 lines · cpp
1//===- llvm/IR/DiagnosticPrinter.cpp - 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-exception6//7//===----------------------------------------------------------------------===//8//9// This file defines a diagnostic printer relying on raw_ostream.10//11//===----------------------------------------------------------------------===//12 13#include "llvm/IR/DiagnosticPrinter.h"14#include "llvm/ADT/Twine.h"15#include "llvm/IR/Module.h"16#include "llvm/IR/Value.h"17#include "llvm/Support/SourceMgr.h"18#include "llvm/Support/raw_ostream.h"19 20using namespace llvm;21 22DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(char C) {23 Stream << C;24 return *this;25}26 27DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned char C) {28 Stream << C;29 return *this;30}31 32DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(signed char C) {33 Stream << C;34 return *this;35}36 37DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(StringRef Str) {38 Stream << Str;39 return *this;40}41 42DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const char *Str) {43 Stream << Str;44 return *this;45}46 47DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(48 const std::string &Str) {49 Stream << Str;50 return *this;51}52 53DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned long N) {54 Stream << N;55 return *this;56}57DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long N) {58 Stream << N;59 return *this;60}61 62DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(63 unsigned long long N) {64 Stream << N;65 return *this;66}67 68DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(long long N) {69 Stream << N;70 return *this;71}72 73DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const void *P) {74 Stream << P;75 return *this;76}77 78DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(unsigned int N) {79 Stream << N;80 return *this;81}82 83DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(int N) {84 Stream << N;85 return *this;86}87 88DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(double N) {89 Stream << N;90 return *this;91}92 93DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Twine &Str) {94 Str.print(Stream);95 return *this;96}97 98// IR related types.99DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Value &V) {100 // Avoid printing '@' prefix for named functions.101 if (V.hasName())102 Stream << V.getName();103 else104 V.printAsOperand(Stream, /*PrintType=*/false);105 106 return *this;107}108 109DiagnosticPrinter &DiagnosticPrinterRawOStream::operator<<(const Module &M) {110 Stream << M.getModuleIdentifier();111 return *this;112}113 114// Other types.115DiagnosticPrinter &DiagnosticPrinterRawOStream::116operator<<(const SMDiagnostic &Diag) {117 // We don't have to print the SMDiagnostic kind, as the diagnostic severity118 // is printed by the diagnostic handler.119 Diag.print("", Stream, /*ShowColors=*/true, /*ShowKindLabel=*/false);120 return *this;121}122