diff --git a/compiler/rustc_error_messages/locales/en-US/monomorphize.ftl b/compiler/rustc_error_messages/locales/en-US/monomorphize.ftl index 4c67c6f5cb4..48ddb54b79e 100644 --- a/compiler/rustc_error_messages/locales/en-US/monomorphize.ftl +++ b/compiler/rustc_error_messages/locales/en-US/monomorphize.ftl @@ -11,6 +11,10 @@ monomorphize_consider_type_length_limit = monomorphize_fatal_error = {$error_message} +monomorphize_unknown_partition_strategy = unknown partitioning strategy + +monomorphize_symbol_already_defined = symbol `{$symbol}` is already defined + monomorphize_unused_generic_params = item has unused generic parameters monomorphize_large_assignments = diff --git a/compiler/rustc_monomorphize/src/errors.rs b/compiler/rustc_monomorphize/src/errors.rs index 62ebac97136..fa7655f2624 100644 --- a/compiler/rustc_monomorphize/src/errors.rs +++ b/compiler/rustc_monomorphize/src/errors.rs @@ -39,14 +39,6 @@ pub struct FatalError { pub error_message: String, } -#[derive(SessionDiagnostic)] -#[diag(monomorphize::fatal_error)] -pub struct SpanFatalError { - #[primary_span] - pub span: Span, - pub error_message: String, -} - pub struct UnusedGenericParams { pub span: Span, pub param_spans: Vec, @@ -79,3 +71,15 @@ pub struct LargeAssignmentsLint { pub size: u64, pub limit: u64, } + +#[derive(SessionDiagnostic)] +#[diag(monomorphize::unknown_partition_strategy)] +pub struct UnknownPartitionStrategy; + +#[derive(SessionDiagnostic)] +#[diag(monomorphize::symbol_already_defined)] +pub struct SymbolAlreadyDefined { + #[primary_span] + pub span: Option, + pub symbol: String, +} diff --git a/compiler/rustc_monomorphize/src/partitioning/mod.rs b/compiler/rustc_monomorphize/src/partitioning/mod.rs index d88b7e0a813..3d9197c7549 100644 --- a/compiler/rustc_monomorphize/src/partitioning/mod.rs +++ b/compiler/rustc_monomorphize/src/partitioning/mod.rs @@ -108,7 +108,7 @@ use rustc_span::symbol::Symbol; use crate::collector::InliningMap; use crate::collector::{self, MonoItemCollectionMode}; -use crate::errors::{FatalError, SpanFatalError}; +use crate::errors::{SymbolAlreadyDefined, UnknownPartitionStrategy}; pub struct PartitioningCx<'a, 'tcx> { tcx: TyCtxt<'tcx>, @@ -151,8 +151,7 @@ fn get_partitioner<'tcx>(tcx: TyCtxt<'tcx>) -> Box> { match strategy { "default" => Box::new(default::DefaultPartitioning), _ => { - let error_message = "unknown partitioning strategy".to_string(); - tcx.sess.emit_fatal(FatalError { error_message: error_message.clone() }); + tcx.sess.emit_fatal(UnknownPartitionStrategy); } } } @@ -335,13 +334,7 @@ where (span1, span2) => span1.or(span2), }; - let error_message = format!("symbol `{}` is already defined", sym1); - - if let Some(span) = span { - tcx.sess.emit_fatal(SpanFatalError { span, error_message: error_message.clone() }); - } else { - tcx.sess.emit_fatal(FatalError { error_message: error_message.clone() }); - } + tcx.sess.emit_fatal(SymbolAlreadyDefined { span, symbol: sym1.to_string() }); } } }