diff options
| author | bohan <bohan-zhang@foxmail.com> | 2023-06-14 00:55:36 +0800 |
|---|---|---|
| committer | bohan <bohan-zhang@foxmail.com> | 2023-06-14 01:38:35 +0800 |
| commit | f7330eb752cdd83a9b944d1d64a092c7d2454c17 (patch) | |
| tree | 474d4ef8c1c9e0a2bb395aaaf5074b9a904ce665 /compiler/rustc_resolve/src | |
| parent | 4bd4e2ea824f4f458cae8917047ebb6b88853fe6 (diff) | |
| download | rust-f7330eb752cdd83a9b944d1d64a092c7d2454c17.tar.gz rust-f7330eb752cdd83a9b944d1d64a092c7d2454c17.zip | |
fix(resolve): update `shadowed_glob` more precision
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/imports.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/compiler/rustc_resolve/src/imports.rs b/compiler/rustc_resolve/src/imports.rs index 7f944fb5745..47d8e5993fd 100644 --- a/compiler/rustc_resolve/src/imports.rs +++ b/compiler/rustc_resolve/src/imports.rs @@ -338,7 +338,21 @@ impl<'a, 'tcx> Resolver<'a, 'tcx> { } else { resolution.binding = Some(nonglob_binding); } - resolution.shadowed_glob = Some(glob_binding); + + if let Some(old_binding) = resolution.shadowed_glob { + assert!(old_binding.is_glob_import()); + if glob_binding.res() != old_binding.res() { + resolution.shadowed_glob = Some(this.ambiguity( + AmbiguityKind::GlobVsGlob, + old_binding, + glob_binding, + )); + } else if !old_binding.vis.is_at_least(binding.vis, this.tcx) { + resolution.shadowed_glob = Some(glob_binding); + } + } else { + resolution.shadowed_glob = Some(glob_binding); + } } (false, false) => { return Err(old_binding); |
