diff options
| author | bors <bors@rust-lang.org> | 2025-09-03 14:20:23 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-09-03 14:20:23 +0000 |
| commit | fd75a9c32d643f39c8c61df770d2cff60b3fefd5 (patch) | |
| tree | c37bb00bebb8e080cb67262f51620a3ee816220f /compiler/rustc_resolve/src/ident.rs | |
| parent | 51ff895062ba60a7cba53f57af928c3fb7b0f2f4 (diff) | |
| parent | 263048d06327d104e4e49d1288bc392c96c494fe (diff) | |
| download | rust-fd75a9c32d643f39c8c61df770d2cff60b3fefd5.tar.gz rust-fd75a9c32d643f39c8c61df770d2cff60b3fefd5.zip | |
Auto merge of #146160 - Zalathar:rollup-qxphx7g, r=Zalathar
Rollup of 8 pull requests Successful merges: - rust-lang/rust#145279 (Constify conversion traits (part 1)) - rust-lang/rust#145414 (unicode-table-generator refactors) - rust-lang/rust#145823 (editorconfig: don't use nonexistent syntax) - rust-lang/rust#145944 (std: Start supporting WASIp2 natively ) - rust-lang/rust#145961 (resolve: Avoid a regression from splitting prelude into two scopes) - rust-lang/rust#146032 (Explicity disable LSX feature for `loongarch64-unknown-none` target) - rust-lang/rust#146106 (fix(lexer): Only allow horizontal whitespace in frontmatter ) - rust-lang/rust#146154 (CI: rfl: move job forward to Linux v6.17-rc3 plus 2 commits) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_resolve/src/ident.rs')
| -rw-r--r-- | compiler/rustc_resolve/src/ident.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/compiler/rustc_resolve/src/ident.rs b/compiler/rustc_resolve/src/ident.rs index dae42645bec..bc06a227571 100644 --- a/compiler/rustc_resolve/src/ident.rs +++ b/compiler/rustc_resolve/src/ident.rs @@ -422,6 +422,8 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { // to detect potential ambiguities. let mut innermost_result: Option<(NameBinding<'_>, Flags)> = None; let mut determinacy = Determinacy::Determined; + let mut extern_prelude_item_binding = None; + let mut extern_prelude_flag_binding = None; // Shadowed bindings don't need to be marked as used or non-speculatively loaded. macro finalize_scope() { if innermost_result.is_none() { finalize } else { None } @@ -558,7 +560,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { Scope::ExternPreludeItems => { // FIXME: use `finalize_scope` here. match this.reborrow().extern_prelude_get_item(ident, finalize.is_some()) { - Some(binding) => Ok((binding, Flags::empty())), + Some(binding) => { + extern_prelude_item_binding = Some(binding); + Ok((binding, Flags::empty())) + } None => Err(Determinacy::determined( this.graph_root.unexpanded_invocations.borrow().is_empty(), )), @@ -566,7 +571,10 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { } Scope::ExternPreludeFlags => { match this.extern_prelude_get_flag(ident, finalize_scope!().is_some()) { - Some(binding) => Ok((binding, Flags::empty())), + Some(binding) => { + extern_prelude_flag_binding = Some(binding); + Ok((binding, Flags::empty())) + } None => Err(Determinacy::Determined), } } @@ -686,7 +694,16 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> { } else { None }; - if let Some(kind) = ambiguity_error_kind { + // Skip ambiguity errors for extern flag bindings "overridden" + // by extern item bindings. + // FIXME: Remove with lang team approval. + let issue_145575_hack = Some(binding) + == extern_prelude_flag_binding + && extern_prelude_item_binding.is_some() + && extern_prelude_item_binding != Some(innermost_binding); + if let Some(kind) = ambiguity_error_kind + && !issue_145575_hack + { let misc = |f: Flags| { if f.contains(Flags::MISC_SUGGEST_CRATE) { AmbiguityErrorMisc::SuggestCrate |
