]> git.lizzy.rs Git - rust.git/commitdiff
Accommodate the case where dup lang items are entirely external.
authorJP Sugarbroad <jpsugar@google.com>
Thu, 14 Apr 2016 20:25:14 +0000 (13:25 -0700)
committerJP Sugarbroad <jpsugar@google.com>
Thu, 14 Apr 2016 20:25:45 +0000 (13:25 -0700)
Fixes #32961

src/librustc/middle/lang_items.rs

index 86531ced8dfae41e1f174074ef3682c9e97d7bc2..83929c17ca3e4a783db68711e8871e505b88a30c 100644 (file)
@@ -189,13 +189,19 @@ pub fn collect_item(&mut self, item_index: usize,
         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.");