From 653cd47c09454c150fd9a61ff654710bbd7ba5b8 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Sat, 15 Sep 2018 17:52:59 +0300 Subject: [PATCH] rustc_resolve: use `continue` instead of `return` to "exit" a loop iteration. --- src/librustc_resolve/resolve_imports.rs | 4 +-- src/test/ui/run-pass/uniform-paths/basic.rs | 2 +- .../issue-54253.rs | 27 +++++++++++++++++ .../issue-54253.stderr | 9 ++++++ .../ui/rust-2018/uniform-paths/issue-54253.rs | 29 +++++++++++++++++++ .../uniform-paths/issue-54253.stderr | 9 ++++++ 6 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.rs create mode 100644 src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.stderr create mode 100644 src/test/ui/rust-2018/uniform-paths/issue-54253.rs create mode 100644 src/test/ui/rust-2018/uniform-paths/issue-54253.stderr diff --git a/src/librustc_resolve/resolve_imports.rs b/src/librustc_resolve/resolve_imports.rs index c86d430face..dc4a76db692 100644 --- a/src/librustc_resolve/resolve_imports.rs +++ b/src/librustc_resolve/resolve_imports.rs @@ -746,7 +746,7 @@ struct UniformPathsCanaryResults<'a> { // Currently imports can't resolve in non-module scopes, // we only have canaries in them for future-proofing. if external_crate.is_none() && results.module_scope.is_none() { - return; + continue; } { @@ -761,7 +761,7 @@ struct UniformPathsCanaryResults<'a> { let possible_resultions = 1 + all_results.filter(|&def| def != first).count(); if possible_resultions <= 1 { - return; + continue; } } diff --git a/src/test/ui/run-pass/uniform-paths/basic.rs b/src/test/ui/run-pass/uniform-paths/basic.rs index fbdac98d258..7d997fe493a 100644 --- a/src/test/ui/run-pass/uniform-paths/basic.rs +++ b/src/test/ui/run-pass/uniform-paths/basic.rs @@ -37,7 +37,7 @@ fn main() { { // Test that having `std_io` in a module scope and a non-module // scope is allowed, when both resolve to the same definition. - use std::io as std_io; + use ::std::io as std_io; use std_io::stdout; stdout(); } diff --git a/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.rs b/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.rs new file mode 100644 index 00000000000..1f19a05d7a7 --- /dev/null +++ b/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.rs @@ -0,0 +1,27 @@ +// Copyright 2018 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// edition:2018 + +// Dummy import to introduce `uniform_paths` canaries. +use std; + +// fn version() -> &'static str {""} + +mod foo { + // Error wasn't reported, despite `version` being commented out above. + use crate::version; //~ ERROR unresolved import `crate::version` + + fn bar() { + version(); + } +} + +fn main() {} diff --git a/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.stderr b/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.stderr new file mode 100644 index 00000000000..6dcc451c60a --- /dev/null +++ b/src/test/ui/rust-2018/uniform-paths-forward-compat/issue-54253.stderr @@ -0,0 +1,9 @@ +error[E0432]: unresolved import `crate::version` + --> $DIR/issue-54253.rs:20:9 + | +LL | use crate::version; //~ ERROR unresolved import `crate::version` + | ^^^^^^^^^^^^^^ no `version` in the root + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0432`. diff --git a/src/test/ui/rust-2018/uniform-paths/issue-54253.rs b/src/test/ui/rust-2018/uniform-paths/issue-54253.rs new file mode 100644 index 00000000000..7ca5c9e9eae --- /dev/null +++ b/src/test/ui/rust-2018/uniform-paths/issue-54253.rs @@ -0,0 +1,29 @@ +// Copyright 2018 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// edition:2018 + +#![feature(uniform_paths)] + +// Dummy import to introduce `uniform_paths` canaries. +use std; + +// fn version() -> &'static str {""} + +mod foo { + // Error wasn't reported, despite `version` being commented out above. + use crate::version; //~ ERROR unresolved import `crate::version` + + fn bar() { + version(); + } +} + +fn main() {} diff --git a/src/test/ui/rust-2018/uniform-paths/issue-54253.stderr b/src/test/ui/rust-2018/uniform-paths/issue-54253.stderr new file mode 100644 index 00000000000..0016e21ef4d --- /dev/null +++ b/src/test/ui/rust-2018/uniform-paths/issue-54253.stderr @@ -0,0 +1,9 @@ +error[E0432]: unresolved import `crate::version` + --> $DIR/issue-54253.rs:22:9 + | +LL | use crate::version; //~ ERROR unresolved import `crate::version` + | ^^^^^^^^^^^^^^ no `version` in the root + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0432`.