Skip to content

Commit

Permalink
Auto merge of #57181 - petrochenkov:impice3, r=estebank
Browse files Browse the repository at this point in the history
resolve: Fix another ICE in import validation

Imports are allowed to have ambiguous resolutions as long as all of them have same `Def`.
As it turned out, it's possible for different `Module`s to have same `Def` when `extern crate` items are involved.

Fixes #56596
  • Loading branch information
bors committed Dec 29, 2018
2 parents d5175f4 + 2af1d6f commit 4190449
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 5 deletions.
8 changes: 4 additions & 4 deletions src/librustc_resolve/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1014,11 +1014,11 @@ enum ModuleOrUniformRoot<'a> {
CurrentScope,
}

impl<'a> PartialEq for ModuleOrUniformRoot<'a> {
fn eq(&self, other: &Self) -> bool {
match (*self, *other) {
impl ModuleOrUniformRoot<'_> {
fn same_def(lhs: Self, rhs: Self) -> bool {
match (lhs, rhs) {
(ModuleOrUniformRoot::Module(lhs),
ModuleOrUniformRoot::Module(rhs)) => ptr::eq(lhs, rhs),
ModuleOrUniformRoot::Module(rhs)) => lhs.def() == rhs.def(),
(ModuleOrUniformRoot::CrateRootAndExternPrelude,
ModuleOrUniformRoot::CrateRootAndExternPrelude) |
(ModuleOrUniformRoot::ExternPrelude, ModuleOrUniformRoot::ExternPrelude) |
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_resolve/resolve_imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -848,7 +848,7 @@ impl<'a, 'b:'a> ImportResolver<'a, 'b> {
PathResult::Module(module) => {
// Consistency checks, analogous to `finalize_current_module_macro_resolutions`.
if let Some(initial_module) = directive.imported_module.get() {
if module != initial_module && no_ambiguity {
if !ModuleOrUniformRoot::same_def(module, initial_module) && no_ambiguity {
span_bug!(directive.span, "inconsistent resolution for an import");
}
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
pub extern crate core;
11 changes: 11 additions & 0 deletions src/test/ui/rust-2018/uniform-paths/issue-56596-2.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// compile-pass
// edition:2018
// compile-flags: --extern issue_56596_2
// aux-build:issue-56596-2.rs

mod m {
use core::any;
pub use issue_56596_2::*;
}

fn main() {}

0 comments on commit 4190449

Please sign in to comment.