Skip to content

Commit 350f9a2

Browse files
committed
resolve: Do not skip extern prelude during speculative resolution
1 parent 37ba107 commit 350f9a2

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

src/librustc_resolve/lib.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -1980,9 +1980,15 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
19801980
}
19811981

19821982
if !module.no_implicit_prelude {
1983-
// `record_used` means that we don't try to load crates during speculative resolution
1984-
if record_used && ns == TypeNS && self.extern_prelude.contains(&ident.name) {
1985-
let crate_id = self.crate_loader.process_path_extern(ident.name, ident.span);
1983+
if ns == TypeNS && self.extern_prelude.contains(&ident.name) {
1984+
let crate_id = if record_used {
1985+
self.crate_loader.process_path_extern(ident.name, ident.span)
1986+
} else if let Some(crate_id) =
1987+
self.crate_loader.maybe_process_path_extern(ident.name, ident.span) {
1988+
crate_id
1989+
} else {
1990+
return None;
1991+
};
19861992
let crate_root = self.get_module(DefId { krate: crate_id, index: CRATE_DEF_INDEX });
19871993
self.populate_module_if_necessary(&crate_root);
19881994

src/test/run-pass/extern/extern-prelude-no-speculative.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// run-pass
1212
#![allow(unused_variables)]
13-
// compile-flags: --extern LooksLikeExternCrate=/path/to/nowhere
13+
// compile-flags: --extern LooksLikeExternCrate
1414

1515
mod m {
1616
pub struct LooksLikeExternCrate;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub trait MyTrait {}

src/test/ui/impl-trait/extra-item.rs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
// aux-build:extra-item.rs
2+
// compile-flags:--extern extra_item
3+
4+
struct S;
5+
6+
impl extra_item::MyTrait for S {
7+
fn extra() {} //~ ERROR method `extra` is not a member of trait `extra_item::MyTrait`
8+
}
9+
10+
fn main() {}
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
error[E0407]: method `extra` is not a member of trait `extra_item::MyTrait`
2+
--> $DIR/extra-item.rs:7:5
3+
|
4+
LL | fn extra() {} //~ ERROR method `extra` is not a member of trait `extra_item::MyTrait`
5+
| ^^^^^^^^^^^^^ not a member of trait `extra_item::MyTrait`
6+
7+
error: aborting due to previous error
8+
9+
For more information about this error, try `rustc --explain E0407`.

0 commit comments

Comments
 (0)