diff options
| author | Antoni Boucher <bouanto@zoho.com> | 2023-03-05 12:31:16 -0500 |
|---|---|---|
| committer | Antoni Boucher <bouanto@zoho.com> | 2023-03-05 12:31:16 -0500 |
| commit | 2c0c25dcc1598cd115838e1e1d74d9f32ffd8dbf (patch) | |
| tree | 0c3c0884734268656cd2ae248986322d6776fc70 /compiler/rustc_codegen_gcc | |
| parent | fce70535676f43f21d683d67cd64eea2923f3ef5 (diff) | |
| download | rust-2c0c25dcc1598cd115838e1e1d74d9f32ffd8dbf.tar.gz rust-2c0c25dcc1598cd115838e1e1d74d9f32ffd8dbf.zip | |
Fix for diagnostics
Diffstat (limited to 'compiler/rustc_codegen_gcc')
| -rw-r--r-- | compiler/rustc_codegen_gcc/locales/en-US.ftl | 3 | ||||
| -rw-r--r-- | compiler/rustc_codegen_gcc/src/attributes.rs | 11 | ||||
| -rw-r--r-- | compiler/rustc_codegen_gcc/src/errors.rs | 9 |
3 files changed, 18 insertions, 5 deletions
diff --git a/compiler/rustc_codegen_gcc/locales/en-US.ftl b/compiler/rustc_codegen_gcc/locales/en-US.ftl index 2181d49eeef..0a94a08f8dc 100644 --- a/compiler/rustc_codegen_gcc/locales/en-US.ftl +++ b/compiler/rustc_codegen_gcc/locales/en-US.ftl @@ -63,3 +63,6 @@ codegen_gcc_invalid_monomorphization_unsupported_operation = codegen_gcc_invalid_minimum_alignment = invalid minimum global alignment: {$err} + +codegen_gcc_tied_target_features = the target features {$features} must all be either enabled or disabled together + .help = add the missing features in a `target_feature` attribute diff --git a/compiler/rustc_codegen_gcc/src/attributes.rs b/compiler/rustc_codegen_gcc/src/attributes.rs index 243a1a36dd0..db841b1b524 100644 --- a/compiler/rustc_codegen_gcc/src/attributes.rs +++ b/compiler/rustc_codegen_gcc/src/attributes.rs @@ -9,7 +9,7 @@ use rustc_session::Session; use rustc_span::symbol::sym; use smallvec::{smallvec, SmallVec}; -use crate::context::CodegenCx; +use crate::{context::CodegenCx, errors::TiedTargetFeatures}; // Given a map from target_features to whether they are enabled or disabled, // ensure only valid combinations are allowed. @@ -84,10 +84,11 @@ pub fn from_fn_attrs<'gcc, 'tcx>( let span = cx.tcx .get_attr(instance.def_id(), sym::target_feature) .map_or_else(|| cx.tcx.def_span(instance.def_id()), |a| a.span); - let msg = format!("the target features {} must all be either enabled or disabled together", features.join(", ")); - let mut err = cx.tcx.sess.struct_span_err(span, &msg); - err.help("add the missing features in a `target_feature` attribute"); - err.emit(); + cx.tcx.sess.create_err(TiedTargetFeatures { + features: features.join(", "), + span, + }) + .emit(); return; } diff --git a/compiler/rustc_codegen_gcc/src/errors.rs b/compiler/rustc_codegen_gcc/src/errors.rs index 5ea39606c08..9305bd1e043 100644 --- a/compiler/rustc_codegen_gcc/src/errors.rs +++ b/compiler/rustc_codegen_gcc/src/errors.rs @@ -227,3 +227,12 @@ pub(crate) struct UnwindingInlineAsm { pub(crate) struct InvalidMinimumAlignment { pub err: String, } + +#[derive(Diagnostic)] +#[diag(codegen_gcc_tied_target_features)] +#[help] +pub(crate) struct TiedTargetFeatures { + #[primary_span] + pub span: Span, + pub features: String, +} |
