resolve: Never override real bindings with Def::Err
s from error recovery
This commit is contained in:
parent
60e825389d
commit
ddb550a0e3
@ -466,6 +466,10 @@ impl<'a> Resolver<'a> {
|
||||
self.set_binding_parent_module(binding, module);
|
||||
self.update_resolution(module, ident, ns, |this, resolution| {
|
||||
if let Some(old_binding) = resolution.binding {
|
||||
if binding.def() == Def::Err {
|
||||
// Do not override real bindings with `Def::Err`s from error recovery.
|
||||
return Ok(());
|
||||
}
|
||||
match (old_binding.is_glob_import(), binding.is_glob_import()) {
|
||||
(true, true) => {
|
||||
if binding.def() != old_binding.def() {
|
||||
|
@ -33,7 +33,7 @@ mod g {
|
||||
fn main() {
|
||||
e::foo();
|
||||
f::foo(); //~ ERROR `foo` is ambiguous
|
||||
g::foo(); //~ ERROR `foo` is ambiguous
|
||||
g::foo();
|
||||
}
|
||||
|
||||
mod ambiguous_module_errors {
|
||||
|
@ -50,25 +50,6 @@ LL | pub use b::*;
|
||||
| ^^^^
|
||||
= help: consider adding an explicit import of `foo` to disambiguate
|
||||
|
||||
error[E0659]: `foo` is ambiguous (glob import vs glob import in the same module)
|
||||
--> $DIR/duplicate.rs:36:8
|
||||
|
|
||||
LL | g::foo(); //~ ERROR `foo` is ambiguous
|
||||
| ^^^ ambiguous name
|
||||
|
|
||||
note: `foo` could refer to the function imported here
|
||||
--> $DIR/duplicate.rs:29:13
|
||||
|
|
||||
LL | pub use a::*;
|
||||
| ^^^^
|
||||
= help: consider adding an explicit import of `foo` to disambiguate
|
||||
note: `foo` could also refer to the unresolved item imported here
|
||||
--> $DIR/duplicate.rs:30:13
|
||||
|
|
||||
LL | pub use f::*;
|
||||
| ^^^^
|
||||
= help: consider adding an explicit import of `foo` to disambiguate
|
||||
|
||||
error[E0659]: `foo` is ambiguous (glob import vs glob import in the same module)
|
||||
--> $DIR/duplicate.rs:49:9
|
||||
|
|
||||
@ -88,7 +69,7 @@ LL | use self::m2::*;
|
||||
| ^^^^^^^^^^^
|
||||
= help: consider adding an explicit import of `foo` to disambiguate
|
||||
|
||||
error: aborting due to 5 previous errors
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
Some errors occurred: E0252, E0659.
|
||||
For more information about an error, try `rustc --explain E0252`.
|
||||
|
@ -42,12 +42,12 @@ LL | use issue_56125::*; //~ ERROR `issue_56125` is ambiguous
|
||||
|
|
||||
= note: `issue_56125` could refer to an extern crate passed with `--extern`
|
||||
= help: use `::issue_56125` to refer to this extern crate unambiguously
|
||||
note: `issue_56125` could also refer to the unresolved item imported here
|
||||
--> $DIR/issue-56125.rs:19:9
|
||||
note: `issue_56125` could also refer to the module imported here
|
||||
--> $DIR/issue-56125.rs:20:9
|
||||
|
|
||||
LL | use empty::issue_56125; //~ ERROR unresolved import `empty::issue_56125`
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
= help: use `self::issue_56125` to refer to this unresolved item unambiguously
|
||||
LL | use issue_56125::*; //~ ERROR `issue_56125` is ambiguous
|
||||
| ^^^^^^^^^^^^^^
|
||||
= help: use `self::issue_56125` to refer to this module unambiguously
|
||||
|
||||
error: aborting due to 4 previous errors
|
||||
|
||||
|
13
src/test/ui/imports/issue-57015.rs
Normal file
13
src/test/ui/imports/issue-57015.rs
Normal file
@ -0,0 +1,13 @@
|
||||
mod glob_ok {
|
||||
pub mod something {
|
||||
pub mod something_else {}
|
||||
}
|
||||
}
|
||||
|
||||
mod single_err {}
|
||||
|
||||
use glob_ok::*; // glob_ok::something
|
||||
use single_err::something; //~ ERROR unresolved import `single_err::something`
|
||||
use something::something_else;
|
||||
|
||||
fn main() {}
|
9
src/test/ui/imports/issue-57015.stderr
Normal file
9
src/test/ui/imports/issue-57015.stderr
Normal file
@ -0,0 +1,9 @@
|
||||
error[E0432]: unresolved import `single_err::something`
|
||||
--> $DIR/issue-57015.rs:10:5
|
||||
|
|
||||
LL | use single_err::something; //~ ERROR unresolved import `single_err::something`
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ no `something` in `single_err`
|
||||
|
||||
error: aborting due to previous error
|
||||
|
||||
For more information about this error, try `rustc --explain E0432`.
|
Loading…
x
Reference in New Issue
Block a user