Auto merge of #102684 - JhonnyBillM:delete-target-data-layout-errors-wrapper, r=davidtwco
Move `IntoDiagnostic` conformance for `TargetDataLayoutErrors` into `rustc_errors` Addressed this suggestion https://github.com/rust-lang/rust/pull/101558#issuecomment-1243830009. This way we comply with the Coherence rule given that `IntoDiagnostic` trait is defined in `rustc_errors`, and almost all other crates depend on it.
This commit is contained in:
commit
1755c85302
9 changed files with 229 additions and 223 deletions
13
compiler/rustc_error_messages/locales/en-US/errors.ftl
Normal file
13
compiler/rustc_error_messages/locales/en-US/errors.ftl
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
errors_target_invalid_address_space = invalid address space `{$addr_space}` for `{$cause}` in "data-layout": {$err}
|
||||||
|
|
||||||
|
errors_target_invalid_bits = invalid {$kind} `{$bit}` for `{$cause}` in "data-layout": {$err}
|
||||||
|
|
||||||
|
errors_target_missing_alignment = missing alignment for `{$cause}` in "data-layout"
|
||||||
|
|
||||||
|
errors_target_invalid_alignment = invalid alignment for `{$cause}` in "data-layout": {$err}
|
||||||
|
|
||||||
|
errors_target_inconsistent_architecture = inconsistent target specification: "data-layout" claims architecture is {$dl}-endian, while "target-endian" is `{$target}`
|
||||||
|
|
||||||
|
errors_target_inconsistent_pointer_width = inconsistent target specification: "data-layout" claims pointers are {$pointer_size}-bit, while "target-pointer-width" is `{$target}`
|
||||||
|
|
||||||
|
errors_target_invalid_bits_size = {$err}
|
|
@ -39,20 +39,6 @@ session_unstable_virtual_function_elimination = `-Zvirtual-function-elimination`
|
||||||
|
|
||||||
session_unsupported_dwarf_version = requested DWARF version {$dwarf_version} is greater than 5
|
session_unsupported_dwarf_version = requested DWARF version {$dwarf_version} is greater than 5
|
||||||
|
|
||||||
session_target_invalid_address_space = invalid address space `{$addr_space}` for `{$cause}` in "data-layout": {$err}
|
|
||||||
|
|
||||||
session_target_invalid_bits = invalid {$kind} `{$bit}` for `{$cause}` in "data-layout": {$err}
|
|
||||||
|
|
||||||
session_target_missing_alignment = missing alignment for `{$cause}` in "data-layout"
|
|
||||||
|
|
||||||
session_target_invalid_alignment = invalid alignment for `{$cause}` in "data-layout": {$err}
|
|
||||||
|
|
||||||
session_target_inconsistent_architecture = inconsistent target specification: "data-layout" claims architecture is {$dl}-endian, while "target-endian" is `{$target}`
|
|
||||||
|
|
||||||
session_target_inconsistent_pointer_width = inconsistent target specification: "data-layout" claims pointers are {$pointer_size}-bit, while "target-pointer-width" is `{$target}`
|
|
||||||
|
|
||||||
session_target_invalid_bits_size = {$err}
|
|
||||||
|
|
||||||
session_target_stack_protector_not_supported = `-Z stack-protector={$stack_protector}` is not supported for target {$target_triple} and will be ignored
|
session_target_stack_protector_not_supported = `-Z stack-protector={$stack_protector}` is not supported for target {$target_triple} and will be ignored
|
||||||
|
|
||||||
session_split_debuginfo_unstable_platform = `-Csplit-debuginfo={$debuginfo}` is unstable on this platform
|
session_split_debuginfo_unstable_platform = `-Csplit-debuginfo={$debuginfo}` is unstable on this platform
|
||||||
|
|
|
@ -46,6 +46,7 @@ fluent_messages! {
|
||||||
compiletest => "../locales/en-US/compiletest.ftl",
|
compiletest => "../locales/en-US/compiletest.ftl",
|
||||||
const_eval => "../locales/en-US/const_eval.ftl",
|
const_eval => "../locales/en-US/const_eval.ftl",
|
||||||
driver => "../locales/en-US/driver.ftl",
|
driver => "../locales/en-US/driver.ftl",
|
||||||
|
errors => "../locales/en-US/errors.ftl",
|
||||||
expand => "../locales/en-US/expand.ftl",
|
expand => "../locales/en-US/expand.ftl",
|
||||||
hir_analysis => "../locales/en-US/hir_analysis.ftl",
|
hir_analysis => "../locales/en-US/hir_analysis.ftl",
|
||||||
infer => "../locales/en-US/infer.ftl",
|
infer => "../locales/en-US/infer.ftl",
|
||||||
|
|
|
@ -3,21 +3,15 @@ use crate::{
|
||||||
CodeSuggestion, DiagnosticBuilder, DiagnosticMessage, EmissionGuarantee, Level, MultiSpan,
|
CodeSuggestion, DiagnosticBuilder, DiagnosticMessage, EmissionGuarantee, Level, MultiSpan,
|
||||||
SubdiagnosticMessage, Substitution, SubstitutionPart, SuggestionStyle,
|
SubdiagnosticMessage, Substitution, SubstitutionPart, SuggestionStyle,
|
||||||
};
|
};
|
||||||
use rustc_ast as ast;
|
|
||||||
use rustc_ast_pretty::pprust;
|
|
||||||
use rustc_data_structures::fx::FxHashMap;
|
use rustc_data_structures::fx::FxHashMap;
|
||||||
use rustc_error_messages::FluentValue;
|
use rustc_error_messages::FluentValue;
|
||||||
use rustc_hir as hir;
|
|
||||||
use rustc_lint_defs::{Applicability, LintExpectationId};
|
use rustc_lint_defs::{Applicability, LintExpectationId};
|
||||||
use rustc_span::edition::LATEST_STABLE_EDITION;
|
use rustc_span::edition::LATEST_STABLE_EDITION;
|
||||||
use rustc_span::symbol::{Ident, MacroRulesNormalizedIdent, Symbol};
|
use rustc_span::symbol::Symbol;
|
||||||
use rustc_span::{edition::Edition, Span, DUMMY_SP};
|
use rustc_span::{Span, DUMMY_SP};
|
||||||
use rustc_target::spec::{PanicStrategy, SplitDebuginfo, StackProtector, TargetTriple};
|
|
||||||
use std::borrow::Cow;
|
use std::borrow::Cow;
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
use std::num::ParseIntError;
|
|
||||||
use std::path::{Path, PathBuf};
|
|
||||||
|
|
||||||
/// Error type for `Diagnostic`'s `suggestions` field, indicating that
|
/// Error type for `Diagnostic`'s `suggestions` field, indicating that
|
||||||
/// `.disable_suggestions()` was called on the `Diagnostic`.
|
/// `.disable_suggestions()` was called on the `Diagnostic`.
|
||||||
|
@ -49,119 +43,6 @@ pub trait IntoDiagnosticArg {
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static>;
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct DiagnosticArgFromDisplay<'a>(pub &'a dyn fmt::Display);
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for DiagnosticArgFromDisplay<'_> {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
self.0.to_string().into_diagnostic_arg()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> From<&'a dyn fmt::Display> for DiagnosticArgFromDisplay<'a> {
|
|
||||||
fn from(t: &'a dyn fmt::Display) -> Self {
|
|
||||||
DiagnosticArgFromDisplay(t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, T: fmt::Display> From<&'a T> for DiagnosticArgFromDisplay<'a> {
|
|
||||||
fn from(t: &'a T) -> Self {
|
|
||||||
DiagnosticArgFromDisplay(t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
macro_rules! into_diagnostic_arg_using_display {
|
|
||||||
($( $ty:ty ),+ $(,)?) => {
|
|
||||||
$(
|
|
||||||
impl IntoDiagnosticArg for $ty {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
self.to_string().into_diagnostic_arg()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)+
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
into_diagnostic_arg_using_display!(
|
|
||||||
i8,
|
|
||||||
u8,
|
|
||||||
i16,
|
|
||||||
u16,
|
|
||||||
i32,
|
|
||||||
u32,
|
|
||||||
i64,
|
|
||||||
u64,
|
|
||||||
i128,
|
|
||||||
u128,
|
|
||||||
std::io::Error,
|
|
||||||
std::num::NonZeroU32,
|
|
||||||
hir::Target,
|
|
||||||
Edition,
|
|
||||||
Ident,
|
|
||||||
MacroRulesNormalizedIdent,
|
|
||||||
ParseIntError,
|
|
||||||
StackProtector,
|
|
||||||
&TargetTriple,
|
|
||||||
SplitDebuginfo
|
|
||||||
);
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for bool {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
if self {
|
|
||||||
DiagnosticArgValue::Str(Cow::Borrowed("true"))
|
|
||||||
} else {
|
|
||||||
DiagnosticArgValue::Str(Cow::Borrowed("false"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for char {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(format!("{:?}", self)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for Symbol {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
self.to_ident_string().into_diagnostic_arg()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> IntoDiagnosticArg for &'a str {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
self.to_string().into_diagnostic_arg()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for String {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(self))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> IntoDiagnosticArg for &'a Path {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for PathBuf {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for usize {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Number(self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for PanicStrategy {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(self.desc().to_string()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'source> Into<FluentValue<'source>> for DiagnosticArgValue<'source> {
|
impl<'source> Into<FluentValue<'source>> for DiagnosticArgValue<'source> {
|
||||||
fn into(self) -> FluentValue<'source> {
|
fn into(self) -> FluentValue<'source> {
|
||||||
match self {
|
match self {
|
||||||
|
@ -171,34 +52,6 @@ impl<'source> Into<FluentValue<'source>> for DiagnosticArgValue<'source> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IntoDiagnosticArg for hir::ConstContext {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Borrowed(match self {
|
|
||||||
hir::ConstContext::ConstFn => "constant function",
|
|
||||||
hir::ConstContext::Static(_) => "static",
|
|
||||||
hir::ConstContext::Const => "constant",
|
|
||||||
}))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for ast::Path {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(Cow::Owned(pprust::path_to_string(&self)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for ast::token::Token {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(pprust::token_to_string(&self))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl IntoDiagnosticArg for ast::token::TokenKind {
|
|
||||||
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
|
||||||
DiagnosticArgValue::Str(pprust::token_kind_to_string(&self))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Trait implemented by error types. This should not be implemented manually. Instead, use
|
/// Trait implemented by error types. This should not be implemented manually. Instead, use
|
||||||
/// `#[derive(Subdiagnostic)]` -- see [rustc_macros::Subdiagnostic].
|
/// `#[derive(Subdiagnostic)]` -- see [rustc_macros::Subdiagnostic].
|
||||||
#[cfg_attr(bootstrap, rustc_diagnostic_item = "AddSubdiagnostic")]
|
#[cfg_attr(bootstrap, rustc_diagnostic_item = "AddSubdiagnostic")]
|
||||||
|
|
207
compiler/rustc_errors/src/diagnostic_impls.rs
Normal file
207
compiler/rustc_errors/src/diagnostic_impls.rs
Normal file
|
@ -0,0 +1,207 @@
|
||||||
|
use crate::{
|
||||||
|
fluent, DiagnosticArgValue, DiagnosticBuilder, Handler, IntoDiagnostic, IntoDiagnosticArg,
|
||||||
|
};
|
||||||
|
use rustc_target::abi::TargetDataLayoutErrors;
|
||||||
|
use rustc_target::spec::{PanicStrategy, SplitDebuginfo, StackProtector, TargetTriple};
|
||||||
|
|
||||||
|
use rustc_ast as ast;
|
||||||
|
use rustc_ast_pretty::pprust;
|
||||||
|
use rustc_hir as hir;
|
||||||
|
use rustc_span::edition::Edition;
|
||||||
|
use rustc_span::symbol::{Ident, MacroRulesNormalizedIdent, Symbol};
|
||||||
|
use std::borrow::Cow;
|
||||||
|
use std::fmt;
|
||||||
|
use std::num::ParseIntError;
|
||||||
|
use std::path::{Path, PathBuf};
|
||||||
|
|
||||||
|
pub struct DiagnosticArgFromDisplay<'a>(pub &'a dyn fmt::Display);
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for DiagnosticArgFromDisplay<'_> {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
self.0.to_string().into_diagnostic_arg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a dyn fmt::Display> for DiagnosticArgFromDisplay<'a> {
|
||||||
|
fn from(t: &'a dyn fmt::Display) -> Self {
|
||||||
|
DiagnosticArgFromDisplay(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a, T: fmt::Display> From<&'a T> for DiagnosticArgFromDisplay<'a> {
|
||||||
|
fn from(t: &'a T) -> Self {
|
||||||
|
DiagnosticArgFromDisplay(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! into_diagnostic_arg_using_display {
|
||||||
|
($( $ty:ty ),+ $(,)?) => {
|
||||||
|
$(
|
||||||
|
impl IntoDiagnosticArg for $ty {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
self.to_string().into_diagnostic_arg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)+
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
into_diagnostic_arg_using_display!(
|
||||||
|
i8,
|
||||||
|
u8,
|
||||||
|
i16,
|
||||||
|
u16,
|
||||||
|
i32,
|
||||||
|
u32,
|
||||||
|
i64,
|
||||||
|
u64,
|
||||||
|
i128,
|
||||||
|
u128,
|
||||||
|
std::io::Error,
|
||||||
|
std::num::NonZeroU32,
|
||||||
|
hir::Target,
|
||||||
|
Edition,
|
||||||
|
Ident,
|
||||||
|
MacroRulesNormalizedIdent,
|
||||||
|
ParseIntError,
|
||||||
|
StackProtector,
|
||||||
|
&TargetTriple,
|
||||||
|
SplitDebuginfo
|
||||||
|
);
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for bool {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
if self {
|
||||||
|
DiagnosticArgValue::Str(Cow::Borrowed("true"))
|
||||||
|
} else {
|
||||||
|
DiagnosticArgValue::Str(Cow::Borrowed("false"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for char {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(format!("{:?}", self)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for Symbol {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
self.to_ident_string().into_diagnostic_arg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> IntoDiagnosticArg for &'a str {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
self.to_string().into_diagnostic_arg()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for String {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> IntoDiagnosticArg for &'a Path {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for PathBuf {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(self.display().to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for usize {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Number(self)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for PanicStrategy {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(self.desc().to_string()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for hir::ConstContext {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Borrowed(match self {
|
||||||
|
hir::ConstContext::ConstFn => "constant function",
|
||||||
|
hir::ConstContext::Static(_) => "static",
|
||||||
|
hir::ConstContext::Const => "constant",
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for ast::Path {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(Cow::Owned(pprust::path_to_string(&self)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for ast::token::Token {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(pprust::token_to_string(&self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnosticArg for ast::token::TokenKind {
|
||||||
|
fn into_diagnostic_arg(self) -> DiagnosticArgValue<'static> {
|
||||||
|
DiagnosticArgValue::Str(pprust::token_kind_to_string(&self))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl IntoDiagnostic<'_, !> for TargetDataLayoutErrors<'_> {
|
||||||
|
fn into_diagnostic(self, handler: &Handler) -> DiagnosticBuilder<'_, !> {
|
||||||
|
let mut diag;
|
||||||
|
match self {
|
||||||
|
TargetDataLayoutErrors::InvalidAddressSpace { addr_space, err, cause } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_invalid_address_space);
|
||||||
|
diag.set_arg("addr_space", addr_space);
|
||||||
|
diag.set_arg("cause", cause);
|
||||||
|
diag.set_arg("err", err);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::InvalidBits { kind, bit, cause, err } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_invalid_bits);
|
||||||
|
diag.set_arg("kind", kind);
|
||||||
|
diag.set_arg("bit", bit);
|
||||||
|
diag.set_arg("cause", cause);
|
||||||
|
diag.set_arg("err", err);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::MissingAlignment { cause } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_missing_alignment);
|
||||||
|
diag.set_arg("cause", cause);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::InvalidAlignment { cause, err } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_invalid_alignment);
|
||||||
|
diag.set_arg("cause", cause);
|
||||||
|
diag.set_arg("err", err);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::InconsistentTargetArchitecture { dl, target } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_inconsistent_architecture);
|
||||||
|
diag.set_arg("dl", dl);
|
||||||
|
diag.set_arg("target", target);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::InconsistentTargetPointerWidth { pointer_size, target } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_inconsistent_pointer_width);
|
||||||
|
diag.set_arg("pointer_size", pointer_size);
|
||||||
|
diag.set_arg("target", target);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
TargetDataLayoutErrors::InvalidBitsSize { err } => {
|
||||||
|
diag = handler.struct_fatal(fluent::errors::target_invalid_bits_size);
|
||||||
|
diag.set_arg("err", err);
|
||||||
|
diag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -51,6 +51,7 @@ use termcolor::{Color, ColorSpec};
|
||||||
pub mod annotate_snippet_emitter_writer;
|
pub mod annotate_snippet_emitter_writer;
|
||||||
mod diagnostic;
|
mod diagnostic;
|
||||||
mod diagnostic_builder;
|
mod diagnostic_builder;
|
||||||
|
mod diagnostic_impls;
|
||||||
pub mod emitter;
|
pub mod emitter;
|
||||||
pub mod json;
|
pub mod json;
|
||||||
mod lock;
|
mod lock;
|
||||||
|
@ -371,10 +372,11 @@ impl fmt::Display for ExplicitBug {
|
||||||
impl error::Error for ExplicitBug {}
|
impl error::Error for ExplicitBug {}
|
||||||
|
|
||||||
pub use diagnostic::{
|
pub use diagnostic::{
|
||||||
AddToDiagnostic, DecorateLint, Diagnostic, DiagnosticArg, DiagnosticArgFromDisplay,
|
AddToDiagnostic, DecorateLint, Diagnostic, DiagnosticArg, DiagnosticArgValue, DiagnosticId,
|
||||||
DiagnosticArgValue, DiagnosticId, DiagnosticStyledString, IntoDiagnosticArg, SubDiagnostic,
|
DiagnosticStyledString, IntoDiagnosticArg, SubDiagnostic,
|
||||||
};
|
};
|
||||||
pub use diagnostic_builder::{DiagnosticBuilder, EmissionGuarantee, Noted};
|
pub use diagnostic_builder::{DiagnosticBuilder, EmissionGuarantee, Noted};
|
||||||
|
pub use diagnostic_impls::DiagnosticArgFromDisplay;
|
||||||
use std::backtrace::Backtrace;
|
use std::backtrace::Backtrace;
|
||||||
|
|
||||||
/// A handler deals with errors and other compiler output.
|
/// A handler deals with errors and other compiler output.
|
||||||
|
|
|
@ -56,7 +56,6 @@ use rustc_query_system::ich::StableHashingContext;
|
||||||
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
|
use rustc_serialize::opaque::{FileEncodeResult, FileEncoder};
|
||||||
use rustc_session::config::{CrateType, OutputFilenames};
|
use rustc_session::config::{CrateType, OutputFilenames};
|
||||||
use rustc_session::cstore::CrateStoreDyn;
|
use rustc_session::cstore::CrateStoreDyn;
|
||||||
use rustc_session::errors::TargetDataLayoutErrorsWrapper;
|
|
||||||
use rustc_session::lint::Lint;
|
use rustc_session::lint::Lint;
|
||||||
use rustc_session::Limit;
|
use rustc_session::Limit;
|
||||||
use rustc_session::Session;
|
use rustc_session::Session;
|
||||||
|
@ -1247,7 +1246,7 @@ impl<'tcx> TyCtxt<'tcx> {
|
||||||
output_filenames: OutputFilenames,
|
output_filenames: OutputFilenames,
|
||||||
) -> GlobalCtxt<'tcx> {
|
) -> GlobalCtxt<'tcx> {
|
||||||
let data_layout = TargetDataLayout::parse(&s.target).unwrap_or_else(|err| {
|
let data_layout = TargetDataLayout::parse(&s.target).unwrap_or_else(|err| {
|
||||||
s.emit_fatal(TargetDataLayoutErrorsWrapper(err));
|
s.emit_fatal(err);
|
||||||
});
|
});
|
||||||
let interners = CtxtInterners::new(arena);
|
let interners = CtxtInterners::new(arena);
|
||||||
let common_types = CommonTypes::new(
|
let common_types = CommonTypes::new(
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
pub use crate::options::*;
|
pub use crate::options::*;
|
||||||
|
|
||||||
use crate::errors::TargetDataLayoutErrorsWrapper;
|
|
||||||
use crate::search_paths::SearchPath;
|
use crate::search_paths::SearchPath;
|
||||||
use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
|
use crate::utils::{CanonicalizedPath, NativeLib, NativeLibKind};
|
||||||
use crate::{early_error, early_warn, Session};
|
use crate::{early_error, early_warn, Session};
|
||||||
|
@ -900,7 +899,7 @@ fn default_configuration(sess: &Session) -> CrateConfig {
|
||||||
let max_atomic_width = sess.target.max_atomic_width();
|
let max_atomic_width = sess.target.max_atomic_width();
|
||||||
let atomic_cas = sess.target.atomic_cas;
|
let atomic_cas = sess.target.atomic_cas;
|
||||||
let layout = TargetDataLayout::parse(&sess.target).unwrap_or_else(|err| {
|
let layout = TargetDataLayout::parse(&sess.target).unwrap_or_else(|err| {
|
||||||
sess.emit_fatal(TargetDataLayoutErrorsWrapper(err));
|
sess.emit_fatal(err);
|
||||||
});
|
});
|
||||||
|
|
||||||
let mut ret = CrateConfig::default();
|
let mut ret = CrateConfig::default();
|
||||||
|
|
|
@ -6,7 +6,6 @@ use rustc_errors::{
|
||||||
};
|
};
|
||||||
use rustc_macros::Diagnostic;
|
use rustc_macros::Diagnostic;
|
||||||
use rustc_span::{Span, Symbol};
|
use rustc_span::{Span, Symbol};
|
||||||
use rustc_target::abi::TargetDataLayoutErrors;
|
|
||||||
use rustc_target::spec::{SplitDebuginfo, StackProtector, TargetTriple};
|
use rustc_target::spec::{SplitDebuginfo, StackProtector, TargetTriple};
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
|
@ -47,59 +46,6 @@ pub struct FeatureDiagnosticHelp {
|
||||||
pub feature: Symbol,
|
pub feature: Symbol,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct TargetDataLayoutErrorsWrapper<'a>(pub TargetDataLayoutErrors<'a>);
|
|
||||||
|
|
||||||
impl IntoDiagnostic<'_, !> for TargetDataLayoutErrorsWrapper<'_> {
|
|
||||||
fn into_diagnostic(self, handler: &Handler) -> DiagnosticBuilder<'_, !> {
|
|
||||||
let mut diag;
|
|
||||||
match self.0 {
|
|
||||||
TargetDataLayoutErrors::InvalidAddressSpace { addr_space, err, cause } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_invalid_address_space);
|
|
||||||
diag.set_arg("addr_space", addr_space);
|
|
||||||
diag.set_arg("cause", cause);
|
|
||||||
diag.set_arg("err", err);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::InvalidBits { kind, bit, cause, err } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_invalid_bits);
|
|
||||||
diag.set_arg("kind", kind);
|
|
||||||
diag.set_arg("bit", bit);
|
|
||||||
diag.set_arg("cause", cause);
|
|
||||||
diag.set_arg("err", err);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::MissingAlignment { cause } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_missing_alignment);
|
|
||||||
diag.set_arg("cause", cause);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::InvalidAlignment { cause, err } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_invalid_alignment);
|
|
||||||
diag.set_arg("cause", cause);
|
|
||||||
diag.set_arg("err", err);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::InconsistentTargetArchitecture { dl, target } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_inconsistent_architecture);
|
|
||||||
diag.set_arg("dl", dl);
|
|
||||||
diag.set_arg("target", target);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::InconsistentTargetPointerWidth { pointer_size, target } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_inconsistent_pointer_width);
|
|
||||||
diag.set_arg("pointer_size", pointer_size);
|
|
||||||
diag.set_arg("target", target);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
TargetDataLayoutErrors::InvalidBitsSize { err } => {
|
|
||||||
diag = handler.struct_fatal(fluent::session::target_invalid_bits_size);
|
|
||||||
diag.set_arg("err", err);
|
|
||||||
diag
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Diagnostic)]
|
#[derive(Diagnostic)]
|
||||||
#[diag(session::not_circumvent_feature)]
|
#[diag(session::not_circumvent_feature)]
|
||||||
pub struct NotCircumventFeature;
|
pub struct NotCircumventFeature;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue