1use std::ffi::{CString, c_uint};
2use std::path::Path;
3
4use rustc_data_structures::small_c_str::SmallCStr;
5use rustc_errors::{Diag, DiagCtxtHandle, Diagnostic, Level, format_diag_message, msg};
6use rustc_macros::Diagnostic;
7use rustc_span::Span;
8
9#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
SymbolAlreadyDefined<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SymbolAlreadyDefined {
span: __binding_0, symbol_name: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("symbol `{$symbol_name}` is already defined")));
;
diag.arg("symbol_name", __binding_1);
diag.span(__binding_0);
diag
}
}
}
}
};Diagnostic)]
10#[diag("symbol `{$symbol_name}` is already defined")]
11pub(crate) struct SymbolAlreadyDefined<'a> {
12 #[primary_span]
13 pub span: Span,
14 pub symbol_name: &'a str,
15}
16
17#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
SanitizerMemtagRequiresMte {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
SanitizerMemtagRequiresMte => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`-Zsanitizer=memtag` requires `-Ctarget-feature=+mte`")));
;
diag
}
}
}
}
};Diagnostic)]
18#[diag("`-Zsanitizer=memtag` requires `-Ctarget-feature=+mte`")]
19pub(crate) struct SanitizerMemtagRequiresMte;
20
21pub(crate) struct ParseTargetMachineConfig<'a>(pub LlvmError<'a>);
22
23impl<G> Diagnostic<'_, G> for ParseTargetMachineConfig<'_> {
24 fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
25 let diag: Diag<'_, ()> = self.0.into_diag(dcx, level);
27 let (message, _) = diag.messages.first().expect("`LlvmError` with no message");
28 let message = format_diag_message(message, &diag.args).into_owned();
29 diag.cancel();
30
31 Diag::new(
32 dcx,
33 level,
34 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to parse target machine config to target machine: {$error}"))msg!("failed to parse target machine config to target machine: {$error}"),
35 )
36 .with_arg("error", message)
37 }
38}
39
40#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AutoDiffComponentUnavailable {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AutoDiffComponentUnavailable { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to load our autodiff backend: {$err}")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
41#[diag("failed to load our autodiff backend: {$err}")]
42pub(crate) struct AutoDiffComponentUnavailable {
43 pub err: String,
44}
45
46#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AutoDiffComponentMissing {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AutoDiffComponentMissing { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("autodiff backend not found in the sysroot: {$err}")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("it will be distributed via rustup in the future")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
47#[diag("autodiff backend not found in the sysroot: {$err}")]
48#[note("it will be distributed via rustup in the future")]
49pub(crate) struct AutoDiffComponentMissing {
50 pub err: String,
51}
52
53#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AutoDiffWithoutLto {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AutoDiffWithoutLto => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the autodiff feature requires setting `lto=\"fat\"` in your Cargo.toml")));
;
diag
}
}
}
}
};Diagnostic)]
54#[diag("using the autodiff feature requires setting `lto=\"fat\"` in your Cargo.toml")]
55pub(crate) struct AutoDiffWithoutLto;
56
57#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
AutoDiffWithoutEnable {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
AutoDiffWithoutEnable => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the autodiff feature requires -Z autodiff=Enable")));
;
diag
}
}
}
}
};Diagnostic)]
58#[diag("using the autodiff feature requires -Z autodiff=Enable")]
59pub(crate) struct AutoDiffWithoutEnable;
60
61#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
RustOffloadComponentUnavailable {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
RustOffloadComponentUnavailable { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to load our rust offload backend: {$err}")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
62#[diag("failed to load our rust offload backend: {$err}")]
63pub(crate) struct RustOffloadComponentUnavailable {
64 pub err: String,
65}
66
67#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
RustOffloadComponentMissing {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
RustOffloadComponentMissing { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("rust offload backend not found in the sysroot: {$err}")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("it will be distributed via rustup in the future")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
68#[diag("rust offload backend not found in the sysroot: {$err}")]
69#[note("it will be distributed via rustup in the future")]
70pub(crate) struct RustOffloadComponentMissing {
71 pub err: String,
72}
73
74#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadWithoutEnable {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadWithoutEnable => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the offload feature requires -Z offload=<Device or Host=/absolute/path/to/device.bin>")));
;
diag
}
}
}
}
};Diagnostic)]
75#[diag(
76 "using the offload feature requires -Z offload=<Device or Host=/absolute/path/to/device.bin>"
77)]
78pub(crate) struct OffloadWithoutEnable;
79
80#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadWithoutFatLTO {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadWithoutFatLTO => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the offload feature requires -C lto=fat")));
;
diag
}
}
}
}
};Diagnostic)]
81#[diag("using the offload feature requires -C lto=fat")]
82pub(crate) struct OffloadWithoutFatLTO;
83
84#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadWithoutAbsPath {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadWithoutAbsPath => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the `-Z offload=Host=/absolute/path/to/device.bin` flag requires an absolute path")));
;
diag
}
}
}
}
};Diagnostic)]
85#[diag("using the `-Z offload=Host=/absolute/path/to/device.bin` flag requires an absolute path")]
86pub(crate) struct OffloadWithoutAbsPath;
87
88#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadWrongFileName {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadWrongFileName => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("using the `-Z offload=Host=/absolute/path/to/device.bin` flag must point to a `device.bin` file")));
;
diag
}
}
}
}
};Diagnostic)]
89#[diag(
90 "using the `-Z offload=Host=/absolute/path/to/device.bin` flag must point to a `device.bin` file"
91)]
92pub(crate) struct OffloadWrongFileName;
93
94#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadNonexistingPath {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadNonexistingPath => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the given path/file to `device.bin` does not exist. Did you forget to run the device compilation first?")));
;
diag
}
}
}
}
};Diagnostic)]
95#[diag(
96 "the given path/file to `device.bin` does not exist. Did you forget to run the device compilation first?"
97)]
98pub(crate) struct OffloadNonexistingPath;
99
100#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadBundleImagesFailed {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadBundleImagesFailed => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("call to BundleImages failed, `device.bin` was not created")));
;
diag
}
}
}
}
};Diagnostic)]
101#[diag("call to BundleImages failed, `device.bin` was not created")]
102pub(crate) struct OffloadBundleImagesFailed;
103
104#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadEmbedFailed {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadEmbedFailed => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("call to EmbedBufferInModule failed, `host.o` was not created")));
;
diag
}
}
}
}
};Diagnostic)]
105#[diag("call to EmbedBufferInModule failed, `host.o` was not created")]
106pub(crate) struct OffloadEmbedFailed;
107
108#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
OffloadWrapImagesFailed {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
OffloadWrapImagesFailed => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("call to WrapImages failed, device image was not wrapped into the host module")));
;
diag
}
}
}
}
};Diagnostic)]
109#[diag("call to WrapImages failed, device image was not wrapped into the host module")]
110pub(crate) struct OffloadWrapImagesFailed;
111
112#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
LtoBitcodeFromRlib {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LtoBitcodeFromRlib { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to get bitcode from object file for LTO ({$err})")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
113#[diag("failed to get bitcode from object file for LTO ({$err})")]
114pub(crate) struct LtoBitcodeFromRlib {
115 pub err: String,
116}
117
118#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
LlvmError<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LlvmError::WriteOutput { path: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not write output to {$path}")));
;
diag.arg("path", __binding_0);
diag
}
LlvmError::CreateTargetMachine { triple: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not create LLVM TargetMachine for triple: {$triple}")));
;
diag.arg("triple", __binding_0);
diag
}
LlvmError::CreateMCSubtargetInfo { triple: __binding_0 } =>
{
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not create LLVM MCSubtargetInfo for triple: {$triple}")));
;
diag.arg("triple", __binding_0);
diag
}
LlvmError::RunLlvmPasses => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to run LLVM passes")));
;
diag
}
LlvmError::WriteIr { path: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to write LLVM IR to {$path}")));
;
diag.arg("path", __binding_0);
diag
}
LlvmError::PrepareThinLtoContext => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to prepare thin LTO context")));
;
diag
}
LlvmError::LoadBitcode { name: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to load bitcode of module \"{$name}\"")));
;
diag.arg("name", __binding_0);
diag
}
LlvmError::WriteThinLtoKey { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("error while writing ThinLTO key data: {$err}")));
;
diag.arg("err", __binding_0);
diag
}
LlvmError::PrepareThinLtoModule => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to prepare thin LTO module")));
;
diag
}
LlvmError::ParseBitcode => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to parse bitcode for LTO module")));
;
diag
}
}
}
}
};Diagnostic)]
119pub(crate) enum LlvmError<'a> {
120 #[diag("could not write output to {$path}")]
121 WriteOutput { path: &'a Path },
122 #[diag("could not create LLVM TargetMachine for triple: {$triple}")]
123 CreateTargetMachine { triple: SmallCStr },
124 #[diag("could not create LLVM MCSubtargetInfo for triple: {$triple}")]
125 CreateMCSubtargetInfo { triple: SmallCStr },
126 #[diag("failed to run LLVM passes")]
127 RunLlvmPasses,
128 #[diag("failed to write LLVM IR to {$path}")]
129 WriteIr { path: &'a Path },
130 #[diag("failed to prepare thin LTO context")]
131 PrepareThinLtoContext,
132 #[diag("failed to load bitcode of module \"{$name}\"")]
133 LoadBitcode { name: CString },
134 #[diag("error while writing ThinLTO key data: {$err}")]
135 WriteThinLtoKey { err: std::io::Error },
136 #[diag("failed to prepare thin LTO module")]
137 PrepareThinLtoModule,
138 #[diag("failed to parse bitcode for LTO module")]
139 ParseBitcode,
140}
141
142pub(crate) struct WithLlvmError<'a>(pub LlvmError<'a>, pub String);
143
144impl<G> Diagnostic<'_, G> for WithLlvmError<'_> {
145 fn into_diag(self, dcx: DiagCtxtHandle<'_>, level: Level) -> Diag<'_, G> {
146 use LlvmError::*;
147 let msg_with_llvm_err = match &self.0 {
148 WriteOutput { .. } => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not write output to {$path}: {$llvm_err}"))msg!("could not write output to {$path}: {$llvm_err}"),
149 CreateTargetMachine { .. } => {
150 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not create LLVM TargetMachine for triple: {$triple}: {$llvm_err}"))msg!("could not create LLVM TargetMachine for triple: {$triple}: {$llvm_err}")
151 }
152 CreateMCSubtargetInfo { .. } => {
153 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("could not create LLVM MCSubtargetInfo for triple: {$triple}: {$llvm_err}"))msg!("could not create LLVM MCSubtargetInfo for triple: {$triple}: {$llvm_err}")
154 }
155 RunLlvmPasses => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to run LLVM passes: {$llvm_err}"))msg!("failed to run LLVM passes: {$llvm_err}"),
156 WriteIr { .. } => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to write LLVM IR to {$path}: {$llvm_err}"))msg!("failed to write LLVM IR to {$path}: {$llvm_err}"),
157 PrepareThinLtoContext => {
158 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to prepare thin LTO context: {$llvm_err}"))msg!("failed to prepare thin LTO context: {$llvm_err}")
159 }
160 LoadBitcode { .. } => {
161 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to load bitcode of module \"{$name}\": {$llvm_err}"))msg!("failed to load bitcode of module \"{$name}\": {$llvm_err}")
162 }
163 WriteThinLtoKey { .. } => {
164 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("error while writing ThinLTO key data: {$err}: {$llvm_err}"))msg!("error while writing ThinLTO key data: {$err}: {$llvm_err}")
165 }
166 PrepareThinLtoModule => {
167 rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to prepare thin LTO module: {$llvm_err}"))msg!("failed to prepare thin LTO module: {$llvm_err}")
168 }
169 ParseBitcode => rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to parse bitcode for LTO module: {$llvm_err}"))msg!("failed to parse bitcode for LTO module: {$llvm_err}"),
170 };
171 self.0
172 .into_diag(dcx, level)
173 .with_primary_message(msg_with_llvm_err)
174 .with_arg("llvm_err", self.1)
175 }
176}
177
178#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
FromLlvmOptimizationDiag<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
FromLlvmOptimizationDiag {
filename: __binding_0,
line: __binding_1,
column: __binding_2,
pass_name: __binding_3,
kind: __binding_4,
message: __binding_5 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$filename}:{$line}:{$column} {$pass_name} ({$kind}): {$message}")));
;
diag.arg("filename", __binding_0);
diag.arg("line", __binding_1);
diag.arg("column", __binding_2);
diag.arg("pass_name", __binding_3);
diag.arg("kind", __binding_4);
diag.arg("message", __binding_5);
diag
}
}
}
}
};Diagnostic)]
179#[diag("{$filename}:{$line}:{$column} {$pass_name} ({$kind}): {$message}")]
180pub(crate) struct FromLlvmOptimizationDiag<'a> {
181 pub filename: &'a str,
182 pub line: std::ffi::c_uint,
183 pub column: std::ffi::c_uint,
184 pub pass_name: &'a str,
185 pub kind: &'a str,
186 pub message: &'a str,
187}
188
189#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for FromLlvmDiag {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
FromLlvmDiag { message: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("{$message}")));
;
diag.arg("message", __binding_0);
diag
}
}
}
}
};Diagnostic)]
190#[diag("{$message}")]
191pub(crate) struct FromLlvmDiag {
192 pub message: String,
193}
194
195#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
WriteBytecode<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
WriteBytecode { path: __binding_0, err: __binding_1 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to write bytecode to {$path}: {$err}")));
;
diag.arg("path", __binding_0);
diag.arg("err", __binding_1);
diag
}
}
}
}
};Diagnostic)]
196#[diag("failed to write bytecode to {$path}: {$err}")]
197pub(crate) struct WriteBytecode<'a> {
198 pub path: &'a Path,
199 pub err: std::io::Error,
200}
201
202#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for CopyBitcode {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
CopyBitcode { err: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("failed to copy bitcode to object file: {$err}")));
;
diag.arg("err", __binding_0);
diag
}
}
}
}
};Diagnostic)]
203#[diag("failed to copy bitcode to object file: {$err}")]
204pub(crate) struct CopyBitcode {
205 pub err: std::io::Error,
206}
207
208#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
UnsupportedCompression {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnsupportedCompression { algorithm: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unsupported debuginfo compression algorithm {$algorithm} - will fall back to uncompressed debuginfo")));
;
diag.arg("algorithm", __binding_0);
diag
}
}
}
}
};Diagnostic)]
209#[diag(
210 "unsupported debuginfo compression algorithm {$algorithm} - will fall back to uncompressed debuginfo"
211)]
212pub(crate) struct UnsupportedCompression {
213 pub algorithm: &'static str,
214}
215
216#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
MismatchedDataLayout<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
MismatchedDataLayout {
rustc_target: __binding_0,
rustc_layout: __binding_1,
llvm_target: __binding_2,
llvm_layout: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("data-layout for target `{$rustc_target}`, `{$rustc_layout}`, differs from LLVM target's `{$llvm_target}` default layout, `{$llvm_layout}`")));
;
diag.arg("rustc_target", __binding_0);
diag.arg("rustc_layout", __binding_1);
diag.arg("llvm_target", __binding_2);
diag.arg("llvm_layout", __binding_3);
diag
}
}
}
}
};Diagnostic)]
217#[diag(
218 "data-layout for target `{$rustc_target}`, `{$rustc_layout}`, differs from LLVM target's `{$llvm_target}` default layout, `{$llvm_layout}`"
219)]
220pub(crate) struct MismatchedDataLayout<'a> {
221 pub rustc_target: &'a str,
222 pub rustc_layout: &'a str,
223 pub llvm_target: &'a str,
224 pub llvm_layout: &'a str,
225}
226
227#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
FixedX18InvalidArch<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
FixedX18InvalidArch { arch: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("the `-Zfixed-x18` flag is not supported on the `{$arch}` architecture")));
;
diag.arg("arch", __binding_0);
diag
}
}
}
}
};Diagnostic)]
228#[diag("the `-Zfixed-x18` flag is not supported on the `{$arch}` architecture")]
229pub(crate) struct FixedX18InvalidArch<'a> {
230 pub arch: &'a str,
231}
232
233#[derive(const _: () =
{
impl<'_sess, G> rustc_errors::Diagnostic<'_sess, G> for
PackedStackBackchainNeedsSoftfloat {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
PackedStackBackchainNeedsSoftfloat => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("`-Zpacked-stack` is incompatible with `backchain` target feature")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("enabling both `-Zpacked-stack` and the `backchain` target feature is incompatible with the default s390x ABI. Switch to s390x-unknown-none-softfloat if you need both attributes")));
;
diag
}
}
}
}
};Diagnostic)]
234#[diag("`-Zpacked-stack` is incompatible with `backchain` target feature")]
235#[note(
236 "enabling both `-Zpacked-stack` and the `backchain` target feature is incompatible with the default s390x ABI. Switch to s390x-unknown-none-softfloat if you need both attributes"
237)]
238pub(crate) struct PackedStackBackchainNeedsSoftfloat;
239
240#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
IntrinsicSignatureMismatch<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
IntrinsicSignatureMismatch {
name: __binding_0,
llvm_fn_ty: __binding_1,
rust_fn_ty: __binding_2,
span: __binding_3 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("intrinsic signature mismatch for `{$name}`: expected signature `{$llvm_fn_ty}`, found `{$rust_fn_ty}`")));
;
diag.arg("name", __binding_0);
diag.arg("llvm_fn_ty", __binding_1);
diag.arg("rust_fn_ty", __binding_2);
diag.span(__binding_3);
diag
}
}
}
}
};Diagnostic)]
241#[diag(
242 "intrinsic signature mismatch for `{$name}`: expected signature `{$llvm_fn_ty}`, found `{$rust_fn_ty}`"
243)]
244pub(crate) struct IntrinsicSignatureMismatch<'a> {
245 pub name: &'a str,
246 pub llvm_fn_ty: &'a str,
247 pub rust_fn_ty: &'a str,
248 #[primary_span]
249 pub span: Span,
250}
251
252#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
UnknownIntrinsic<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnknownIntrinsic { name: __binding_0, span: __binding_1 } =>
{
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("unknown LLVM intrinsic `{$name}`")));
;
diag.arg("name", __binding_0);
diag.span(__binding_1);
diag
}
}
}
}
};Diagnostic)]
253#[diag("unknown LLVM intrinsic `{$name}`")]
254pub(crate) struct UnknownIntrinsic<'a> {
255 pub name: &'a str,
256 #[primary_span]
257 pub span: Span,
258}
259
260#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
IntrinsicWrongArch<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
IntrinsicWrongArch {
name: __binding_0,
target_arch: __binding_1,
span: __binding_2 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("intrinsic `{$name}` cannot be used with target arch `{$target_arch}`")));
;
diag.arg("name", __binding_0);
diag.arg("target_arch", __binding_1);
diag.span(__binding_2);
diag
}
}
}
}
};Diagnostic)]
261#[diag("intrinsic `{$name}` cannot be used with target arch `{$target_arch}`")]
262pub(crate) struct IntrinsicWrongArch<'a> {
263 pub name: &'a str,
264 pub target_arch: &'a str,
265 #[primary_span]
266 pub span: Span,
267}
268
269#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
UnknownLlvmTargetFeaturePrefix<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
UnknownLlvmTargetFeaturePrefix { feature: __binding_0 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("ignoring feature with missing prefix in `-Zllvm-target-feature`: `{$feature}`")));
diag.note(rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("features must begin with a `+` to enable or `-` to disable it")));
;
diag.arg("feature", __binding_0);
diag
}
}
}
}
};Diagnostic)]
270#[diag("ignoring feature with missing prefix in `-Zllvm-target-feature`: `{$feature}`")]
271#[note("features must begin with a `+` to enable or `-` to disable it")]
272pub(crate) struct UnknownLlvmTargetFeaturePrefix<'a> {
273 pub feature: &'a str,
274}
275
276#[derive(const _: () =
{
impl<'_sess, 'a, G> rustc_errors::Diagnostic<'_sess, G> for
LlvmVersionMismatch<'a> {
#[track_caller]
fn into_diag(self, dcx: rustc_errors::DiagCtxtHandle<'_sess>,
level: rustc_errors::Level) -> rustc_errors::Diag<'_sess, G> {
match self {
LlvmVersionMismatch {
expected_version: __binding_0,
llvm_major: __binding_1,
llvm_minor: __binding_2,
llvm_patch: __binding_3,
dll_loc: __binding_4 } => {
let mut diag =
rustc_errors::Diag::new(dcx, level,
rustc_errors::DiagMessage::Inline(std::borrow::Cow::Borrowed("LLVM version mismatch: this compiler was built for LLVM {$expected_version}, but LLVM {$llvm_major}.{$llvm_minor}.{$llvm_patch} was found{$dll_loc}")));
;
diag.arg("expected_version", __binding_0);
diag.arg("llvm_major", __binding_1);
diag.arg("llvm_minor", __binding_2);
diag.arg("llvm_patch", __binding_3);
diag.arg("dll_loc", __binding_4);
diag
}
}
}
}
};Diagnostic)]
277#[diag(
278 "LLVM version mismatch: this compiler was built for LLVM {$expected_version}, but LLVM {$llvm_major}.{$llvm_minor}.{$llvm_patch} was found{$dll_loc}"
279)]
280pub(crate) struct LlvmVersionMismatch<'a> {
281 pub expected_version: c_uint,
282 pub llvm_major: c_uint,
283 pub llvm_minor: c_uint,
284 pub llvm_patch: c_uint,
285 pub dll_loc: &'a str,
286}