about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2016-04-16 01:16:45 +0530
committerManish Goregaokar <manishsmail@gmail.com>2016-04-16 01:18:11 +0530
commit00d4ac32c57b67fe08efcaf65346d267cfafba42 (patch)
treecd3ecf76f657dbf8042e8078e006cc8619cc73a8 /src
parent9873771187707fd3f164b6efc8b6841caf0a7f3f (diff)
parent37e59b9239095bf8b0e0d1ae9952707593395956 (diff)
downloadrust-00d4ac32c57b67fe08efcaf65346d267cfafba42.tar.gz
rust-00d4ac32c57b67fe08efcaf65346d267cfafba42.zip
Rollup merge of #32970 - taralx:patch-2, r=alexcrichton
Accommodate the case where dup lang items are entirely external.

Fixes #32961
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/lang_items.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs
index 86531ced8df..83929c17ca3 100644
--- a/src/librustc/middle/lang_items.rs
+++ b/src/librustc/middle/lang_items.rs
@@ -189,13 +189,19 @@ impl<'a, 'tcx> LanguageItemCollector<'a, 'tcx> {
         match self.items.items[item_index] {
             Some(original_def_id) if original_def_id != item_def_id => {
                 let cstore = &self.session.cstore;
-                let span = self.ast_map.span_if_local(item_def_id)
-                                       .expect("we should have found local duplicate earlier");
-                let mut err = struct_span_err!(self.session,
-                                               span,
-                                               E0152,
-                                               "duplicate lang item found: `{}`.",
-                                               LanguageItems::item_name(item_index));
+                let name = LanguageItems::item_name(item_index);
+                let mut err = match self.ast_map.span_if_local(item_def_id) {
+                    Some(span) => struct_span_err!(
+                        self.session,
+                        span,
+                        E0152,
+                        "duplicate lang item found: `{}`.",
+                        name),
+                    None => self.session.struct_err(&format!(
+                            "duplicate lang item in crate `{}`: `{}`.",
+                            cstore.crate_name(item_def_id.krate),
+                            name)),
+                };
                 if let Some(span) = self.ast_map.span_if_local(original_def_id) {
                     span_note!(&mut err, span,
                                "first defined here.");