about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2016-03-03 09:13:27 +0100
committerGuillaume Gomez <guillaume1.gomez@gmail.com>2016-03-03 12:47:27 +0100
commit7ab9345fe63f56091c11fc4eda4891d6771003ff (patch)
treedb5efd6c4df79c7765222e90b87bc84a5f210678 /src
parent6aa3d0f11a26ff69b4675f780f66010c46169e38 (diff)
downloadrust-7ab9345fe63f56091c11fc4eda4891d6771003ff.tar.gz
rust-7ab9345fe63f56091c11fc4eda4891d6771003ff.zip
Improve error messages
Diffstat (limited to 'src')
-rw-r--r--src/librustc/middle/lang_items.rs30
-rw-r--r--src/test/compile-fail/duplicate_entry_error.rs5
2 files changed, 18 insertions, 17 deletions
diff --git a/src/librustc/middle/lang_items.rs b/src/librustc/middle/lang_items.rs
index 2e448414295..d07df103e24 100644
--- a/src/librustc/middle/lang_items.rs
+++ b/src/librustc/middle/lang_items.rs
@@ -32,7 +32,6 @@ use util::nodemap::FnvHashMap;
 
 use syntax::ast;
 use syntax::attr::AttrMetaMethods;
-use syntax::codemap::Span;
 use syntax::parse::token::InternedString;
 use rustc_front::intravisit::Visitor;
 use rustc_front::hir;
@@ -158,7 +157,7 @@ impl<'a, 'v, 'tcx> Visitor<'v> for LanguageItemCollector<'a, 'tcx> {
             let item_index = self.item_refs.get(&value[..]).cloned();
 
             if let Some(item_index) = item_index {
-                self.collect_item(item_index, self.ast_map.local_def_id(item.id), item.span)
+                self.collect_item(item_index, self.ast_map.local_def_id(item.id))
             }
         }
     }
@@ -180,24 +179,24 @@ impl<'a, 'tcx> LanguageItemCollector<'a, 'tcx> {
     }
 
     pub fn collect_item(&mut self, item_index: usize,
-                        item_def_id: DefId, span: Span) {
+                        item_def_id: DefId) {
         // Check for duplicates.
         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).unwrap_or(span);
+                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));
+                                               span,
+                                               E0152,
+                                               "duplicate lang item found: `{}`.",
+                                               LanguageItems::item_name(item_index));
                 if let Some(span) = self.ast_map.span_if_local(original_def_id) {
                     span_note!(&mut err, span,
-                               "First defined here.");
+                               "first defined here.");
                 } else {
-                    span_note!(&mut err, span,
-                               "First defined in crate `{}`.",
-                               cstore.crate_name(original_def_id.krate));
+                    err.note(&format!("first defined in crate `{}`.",
+                                      cstore.crate_name(original_def_id.krate)));
                 }
                 err.emit();
             }
@@ -214,18 +213,19 @@ impl<'a, 'tcx> LanguageItemCollector<'a, 'tcx> {
         krate.visit_all_items(self);
     }
 
-    pub fn collect_external_language_items(&mut self, krate: &hir::Crate) {
+    pub fn collect_external_language_items(&mut self) {
         let cstore = &self.session.cstore;
+
         for cnum in cstore.crates() {
             for (index, item_index) in cstore.lang_items(cnum) {
                 let def_id = DefId { krate: cnum, index: index };
-                self.collect_item(item_index, def_id, krate.span);
+                self.collect_item(item_index, def_id);
             }
         }
     }
 
     pub fn collect(&mut self, krate: &hir::Crate) {
-        self.collect_external_language_items(krate);
+        self.collect_external_language_items();
         self.collect_local_language_items(krate);
     }
 }
diff --git a/src/test/compile-fail/duplicate_entry_error.rs b/src/test/compile-fail/duplicate_entry_error.rs
index 0c649b1b412..ad5ea291599 100644
--- a/src/test/compile-fail/duplicate_entry_error.rs
+++ b/src/test/compile-fail/duplicate_entry_error.rs
@@ -8,14 +8,15 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
+// note-pattern: first defined in crate `std`.
+
 // Test for issue #31788 and E0152
 
 #![feature(lang_items)]
 
 #[lang = "panic_fmt"]
 fn panic_fmt() -> ! {
-//~^ ERROR: Duplicate lang item found: `panic_fmt`.
-//~| NOTE First defined in crate `std`.
+//~^ ERROR: duplicate lang item found: `panic_fmt`.
     loop {}
 }