Skip to content

Commit b2e0bee

Browse files
petrochenkovpietroalbini
authored andcommitted
resolve: Do not skip extern prelude during speculative resolution
1 parent dbfba9d commit b2e0bee

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
@@ -1977,9 +1977,15 @@ impl<'a, 'crateloader: 'a> Resolver<'a, 'crateloader> {
19771977
}
19781978

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

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`.

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
// except according to those terms.
1010

1111
// run-pass
12-
// compile-flags: --extern LooksLikeExternCrate=/path/to/nowhere
12+
// compile-flags: --extern LooksLikeExternCrate
1313

1414
mod m {
1515
pub struct LooksLikeExternCrate;

0 commit comments

Comments
 (0)