diff options
| author | Matthias Krüger <476013+matthiaskrgr@users.noreply.github.com> | 2025-04-14 18:15:30 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-14 18:15:30 +0200 |
| commit | a4adc005a19a745b1e9159841a1cbd45fca5c9af (patch) | |
| tree | 03dac4e7b558ffc001db7e5adb77da3d8e5542ad /compiler/rustc_resolve/src | |
| parent | c580c498a1fe144d7c5b2dfc7faab1a229aa288b (diff) | |
| parent | 18c787f48f08352ad5167b99920c395e3d703f62 (diff) | |
| download | rust-a4adc005a19a745b1e9159841a1cbd45fca5c9af.tar.gz rust-a4adc005a19a745b1e9159841a1cbd45fca5c9af.zip | |
Rollup merge of #139127 - compiler-errors:prim-ty-hack, r=oli-obk
Fix up partial res of segment in primitive resolution hack There is a hack in the resolver: ``` // In `a(::assoc_item)*` `a` cannot be a module. If `a` does resolve to a module we // don't report an error right away, but try to fallback to a primitive type. ``` This fixes up the resolution for primitives which would otherwise resolve to a module, but we weren't also updating the res of the path segment, leading to weird diagnostics. We explicitly call `self.r.partial_res_map.insert` instead of `record_partial_res` b/c we have recorded a partial res already, and we specifically want to override it. cc https://github.com/rust-lang/rust/issues/139095#issuecomment-2764371934
Diffstat (limited to 'compiler/rustc_resolve/src')
| -rw-r--r-- | compiler/rustc_resolve/src/late.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/compiler/rustc_resolve/src/late.rs b/compiler/rustc_resolve/src/late.rs index a7170edb986..283834e606c 100644 --- a/compiler/rustc_resolve/src/late.rs +++ b/compiler/rustc_resolve/src/late.rs @@ -4606,6 +4606,11 @@ impl<'a, 'ast, 'ra: 'ast, 'tcx> LateResolutionVisitor<'a, 'ast, 'ra, 'tcx> { } }; + // Fix up partial res of segment from `resolve_path` call. + if let Some(id) = path[0].id { + self.r.partial_res_map.insert(id, PartialRes::new(Res::PrimTy(prim))); + } + PartialRes::with_unresolved_segments(Res::PrimTy(prim), path.len() - 1) } PathResult::Module(ModuleOrUniformRoot::Module(module)) => { |
