about summary refs log tree commit diff
path: root/compiler/rustc_codegen_gcc
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_codegen_gcc')
-rw-r--r--compiler/rustc_codegen_gcc/locales/en-US.ftl3
-rw-r--r--compiler/rustc_codegen_gcc/src/attributes.rs11
-rw-r--r--compiler/rustc_codegen_gcc/src/errors.rs9
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,
+}