about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorCldfire <cldfire@3grid.net>2017-11-06 21:40:21 -0500
committerEsteban Küber <esteban@kuber.com.ar>2018-01-25 22:36:48 -0800
commitc39ad4b145f9eee71a5e6b52f9d10acc7e43ce0d (patch)
tree563746b6703991bf864b5bc07e047a7606d47626 /src
parent4cf26f8a133039bfeb5b9f684df9f547278db206 (diff)
downloadrust-c39ad4b145f9eee71a5e6b52f9d10acc7e43ce0d.tar.gz
rust-c39ad4b145f9eee71a5e6b52f9d10acc7e43ce0d.zip
Correctly format `extern crate` conflict resolution help
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/lib.rs4
-rw-r--r--src/libsyntax/parse/parser.rs4
-rw-r--r--src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs12
-rw-r--r--src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.stderr14
4 files changed, 31 insertions, 3 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 55c7e5f3924..6fcdb1d651f 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -3980,14 +3980,14 @@ impl<'a> Resolver<'a> {
                           container));
 
         err.span_label(span, format!("`{}` re{} here", name, new_participle));
-        if old_binding.span != syntax_pos::DUMMY_SP {
+        if old_binding.span != DUMMY_SP {
             err.span_label(self.session.codemap().def_span(old_binding.span),
                            format!("previous {} of the {} `{}` here", old_noun, old_kind, name));
         }
 
         // See https://github.com/rust-lang/rust/issues/32354
         if old_binding.is_import() || new_binding.is_import() {
-            let binding = if new_binding.is_import() {
+            let binding = if new_binding.is_import() && new_binding.span != DUMMY_SP {
                 new_binding
             } else {
                 old_binding
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 8213d604b91..a7977d5235d 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -6128,9 +6128,11 @@ impl<'a> Parser<'a> {
         } else {
             (None, crate_name)
         };
-        self.expect(&token::Semi)?;
 
+        // We grab this before expecting the `;` so it's not a part of the span
         let prev_span = self.prev_span;
+        self.expect(&token::Semi)?;
+
         Ok(self.mk_item(lo.to(prev_span),
                         ident,
                         ItemKind::ExternCrate(maybe_path),
diff --git a/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs b/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs
new file mode 100644
index 00000000000..7c55f9c4eb9
--- /dev/null
+++ b/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs
@@ -0,0 +1,12 @@
+// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+extern crate std;
+fn main() {}
diff --git a/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.stderr b/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.stderr
new file mode 100644
index 00000000000..a4eadcc8b46
--- /dev/null
+++ b/src/test/ui/suggestions/issue-45799-bad-extern-crate-rename-suggestion-formatting.stderr
@@ -0,0 +1,14 @@
+error[E0259]: the name `std` is defined multiple times
+  --> $DIR/issue-45799-bad-extern-crate-rename-suggestion-formatting.rs:11:1
+   |
+11 | extern crate std;
+   | ^^^^^^^^^^^^^^^^ `std` reimported here
+   |
+   = note: `std` must be defined only once in the type namespace of this module
+help: You can use `as` to change the binding name of the import
+   |
+11 | extern crate std as Otherstd;
+   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+