Skip to content

Commit

Permalink
Auto merge of #42580 - tommyip:import-error, r=petrochenkov
Browse files Browse the repository at this point in the history
Only emit one error for `use foo::self;`

Currently `use foo::self;` would emit both E0429 and E0432. This commit silence the latter one (assuming `foo` is a valid module).

Fixes #42559
  • Loading branch information
bors committed Jun 10, 2017
2 parents b7613f8 + b89db83 commit 4bf5c99
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
10 changes: 10 additions & 0 deletions src/librustc_resolve/resolve_imports.rs
Expand Up @@ -482,6 +482,16 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
if let Some(err) = self.finalize_import(import) {
errors = true;

if let SingleImport { source, ref result, .. } = import.subclass {
if source.name == "self" {
// Silence `unresolved import` error if E0429 is already emitted
match result.value_ns.get() {
Err(Determined) => continue,
_ => {},
}
}
}

// If the error is a single failed import then create a "fake" import
// resolution for it so that later resolve stages won't complain.
self.import_dummy_binding(import);
Expand Down
1 change: 0 additions & 1 deletion src/test/compile-fail/E0429.rs
Expand Up @@ -9,7 +9,6 @@
// except according to those terms.

use std::fmt::self; //~ ERROR E0429
//~^ ERROR E0432

fn main () {
}
5 changes: 2 additions & 3 deletions src/test/compile-fail/use-keyword.rs
Expand Up @@ -13,9 +13,8 @@

mod a {
mod b {
use self as A; //~ ERROR `self` imports are only allowed within a { } list
//~^ ERROR unresolved import `self` [E0432]
//~| no `self` in the root
use self as A;
//~^ ERROR `self` imports are only allowed within a { } list
use super as B;
//~^ ERROR unresolved import `super` [E0432]
//~| no `super` in the root
Expand Down
3 changes: 3 additions & 0 deletions src/test/compile-fail/use-mod-4.rs
Expand Up @@ -11,4 +11,7 @@
use foo::self; //~ ERROR unresolved import `foo::self`
//~^ ERROR `self` imports are only allowed within a { } list

use std::mem::self;
//~^ ERROR `self` imports are only allowed within a { } list

fn main() {}

0 comments on commit 4bf5c99

Please sign in to comment.