about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSLASHLogin <loginmlgxd@gmail.com>2022-08-25 23:30:17 +0200
committerSLASHLogin <loginmlgxd@gmail.com>2022-11-09 14:56:20 +0100
commit9f0c16576b9e094e84ec833a51a908ae5ff24d33 (patch)
tree221c66bf1a33e0ca85fd50e472db1934267d9b0c
parent4c625dc6824e3f07232239d618408eb4161d44a6 (diff)
downloadrust-9f0c16576b9e094e84ec833a51a908ae5ff24d33.tar.gz
rust-9f0c16576b9e094e84ec833a51a908ae5ff24d33.zip
Port `symbol_already_defined` error
-rw-r--r--compiler/rustc_codegen_llvm/src/errors.rs9
-rw-r--r--compiler/rustc_codegen_llvm/src/mono_item.rs5
-rw-r--r--compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl3
3 files changed, 13 insertions, 4 deletions
diff --git a/compiler/rustc_codegen_llvm/src/errors.rs b/compiler/rustc_codegen_llvm/src/errors.rs
index b06ad78cf7b..34b2c844f50 100644
--- a/compiler/rustc_codegen_llvm/src/errors.rs
+++ b/compiler/rustc_codegen_llvm/src/errors.rs
@@ -2,6 +2,7 @@ use rustc_errors::fluent;
 use rustc_errors::DiagnosticBuilder;
 use rustc_macros::SessionDiagnostic;
 use rustc_session::SessionDiagnostic;
+use rustc_span::Span;
 
 pub(crate) enum UnknownCTargetFeature<'a> {
     UnknownFeaturePrefix { feature: &'a str },
@@ -46,3 +47,11 @@ pub(crate) struct ErrorCreatingImportLibrary<'a> {
 #[derive(SessionDiagnostic)]
 #[diag(codegen_llvm::instrument_coverage_requires_llvm_12)]
 pub(crate) struct InstrumentCoverageRequiresLLVM12;
+
+#[derive(SessionDiagnostic)]
+#[diag(codegen_llvm::SymbolAlreadyDefined)]
+pub(crate) struct SymbolAlreadyDefined<'a> {
+    #[primary_span]
+    pub span: Span,
+    pub symbol_name: &'a str,
+}
diff --git a/compiler/rustc_codegen_llvm/src/mono_item.rs b/compiler/rustc_codegen_llvm/src/mono_item.rs
index 1eceb7f5c87..d5096873c43 100644
--- a/compiler/rustc_codegen_llvm/src/mono_item.rs
+++ b/compiler/rustc_codegen_llvm/src/mono_item.rs
@@ -25,10 +25,7 @@ impl<'tcx> PreDefineMethods<'tcx> for CodegenCx<'_, 'tcx> {
         let llty = self.layout_of(ty).llvm_type(self);
 
         let g = self.define_global(symbol_name, llty).unwrap_or_else(|| {
-            self.sess().span_fatal(
-                self.tcx.def_span(def_id),
-                &format!("symbol `{}` is already defined", symbol_name),
-            )
+            self.sess().emit_fatal(SymbolAlreadyDefined { span: self.tcx.def_span(def_id), symbol_name })
         });
 
         unsafe {
diff --git a/compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl b/compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl
index 9f75d5a0e47..c1222d3db5f 100644
--- a/compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl
+++ b/compiler/rustc_error_messages/locales/en-US/codegen_llvm.ftl
@@ -18,3 +18,6 @@ codegen_llvm_error_creating_import_library =
 
 codegen_llvm_instrument_coverage_requires_llvm_12 =
     rustc option `-C instrument-coverage` requires LLVM 12 or higher.
+
+codegen_llvm_symbol_already_defined = 
+    symbol `{$symbol_name}` is already defined