https://gcc.gnu.org/g:3637e78565247d85ca890ef2c2cb2ce815d914ca
commit r17-4350-g3637e78565247d85ca890ef2c2cb2ce815d914ca Author: Philip Herron <[email protected]> Date: Thu Sep 10 21:23:23 2026 +0100 gccrs: Only the last segment should resolve to an expr item This doesnt fix that linked issue but its part of the fix thats needed. Addresses Rust-GCC/gccrs#4865 gcc/rust/ChangeLog: * typecheck/rust-hir-type-check-path.cc (TypeCheckExpr::resolve_segments): use probe expr on last seg Signed-off-by: Philip Herron <[email protected]> Diff: --- gcc/rust/typecheck/rust-hir-type-check-path.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/gcc/rust/typecheck/rust-hir-type-check-path.cc b/gcc/rust/typecheck/rust-hir-type-check-path.cc index 2e1731ac1db3..27d7d55e5951 100644 --- a/gcc/rust/typecheck/rust-hir-type-check-path.cc +++ b/gcc/rust/typecheck/rust-hir-type-check-path.cc @@ -26,10 +26,10 @@ #include "rust-rib.h" #include "rust-substitution-mapper.h" #include "rust-hir-path-probe-expr.h" +#include "rust-hir-path-probe-type.h" #include "rust-type-util.h" #include "rust-hir-type-bounds.h" #include "rust-hir-item.h" -#include "rust-session-manager.h" #include "rust-finalized-name-resolution-context.h" namespace Rust { @@ -417,8 +417,19 @@ TypeCheckExpr::resolve_segments (NodeId root_resolved_node_id, for (size_t i = offset; i < segments.size (); i++) { + bool last_seg = i == segments.size () - 1; HIR::PathExprSegment &seg = segments.at (i); - auto candidates = PathProbeExpr::Probe (prev_segment, seg.get_segment ()); + + std::set<PathProbeCandidate> candidates; + if (last_seg) + candidates = PathProbeExpr::Probe (tyseg, seg.get_segment ()); + else + { + auto type_candidates + = TypePathProbe::Probe (tyseg, seg.get_segment ()); + candidates = type_candidates.type_candidates; + } + if (candidates.size () == 0) { rust_error_at (seg.get_locus (),
