https://gcc.gnu.org/g:f9dce5e97dd9a6a3f618ced89f5e05729b0d5fe8
commit r15-8838-gf9dce5e97dd9a6a3f618ced89f5e05729b0d5fe8 Author: Owen Avery <powerboat9.ga...@gmail.com> Date: Tue Feb 18 03:56:33 2025 -0500 gccrs: nr2.0: Set the node id of the root node gcc/rust/ChangeLog: * resolve/rust-forever-stack.h (ForeverStack::ForeverStack): Set the node id of the root node to that of the current crate. * resolve/rust-forever-stack.hxx (ForeverStack::find_starting_point): Use the node id of the root node during resolution of crate segments. gcc/testsuite/ChangeLog: * rust/compile/nr2/exclude: Remove entries. Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com> Diff: --- gcc/rust/resolve/rust-forever-stack.h | 7 +++++-- gcc/rust/resolve/rust-forever-stack.hxx | 7 +------ gcc/testsuite/rust/compile/nr2/exclude | 2 -- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/gcc/rust/resolve/rust-forever-stack.h b/gcc/rust/resolve/rust-forever-stack.h index f1e5e8d2f2d1..64e8a0f0f2c9 100644 --- a/gcc/rust/resolve/rust-forever-stack.h +++ b/gcc/rust/resolve/rust-forever-stack.h @@ -547,13 +547,16 @@ template <Namespace N> class ForeverStack { public: ForeverStack () - // FIXME: Is that valid? Do we use the root? If yes, we should give the - // crate's node id to ForeverStack's constructor : root (Node (Rib (Rib::Kind::Normal), UNKNOWN_NODEID)), cursor_reference (root) { rust_assert (root.is_root ()); rust_assert (root.is_leaf ()); + + // TODO: Should we be using the forever stack root as the crate scope? + // TODO: Is this how we should be getting the crate node id? + auto &mappings = Analysis::Mappings::get (); + root.id = *mappings.crate_num_to_nodeid (mappings.get_current_crate ()); } /** diff --git a/gcc/rust/resolve/rust-forever-stack.hxx b/gcc/rust/resolve/rust-forever-stack.hxx index 9ca8db2c09d3..c1407344b523 100644 --- a/gcc/rust/resolve/rust-forever-stack.hxx +++ b/gcc/rust/resolve/rust-forever-stack.hxx @@ -401,12 +401,7 @@ ForeverStack<N>::find_starting_point ( if (seg.is_crate_path_seg ()) { starting_point = root; - // TODO: is this how we should be getting the crate node id? - auto &mappings = Analysis::Mappings::get (); - NodeId current_crate - = *mappings.crate_num_to_nodeid (mappings.get_current_crate ()); - - insert_segment_resolution (outer_seg, current_crate); + insert_segment_resolution (outer_seg, starting_point.get ().id); iterator++; break; } diff --git a/gcc/testsuite/rust/compile/nr2/exclude b/gcc/testsuite/rust/compile/nr2/exclude index 763387f35488..e179dc30004b 100644 --- a/gcc/testsuite/rust/compile/nr2/exclude +++ b/gcc/testsuite/rust/compile/nr2/exclude @@ -1,7 +1,6 @@ break-rust2.rs canonical_paths1.rs cfg1.rs -complex-path1.rs const_generics_3.rs const_generics_4.rs feature_rust_attri0.rs @@ -29,7 +28,6 @@ pub_restricted_2.rs pub_restricted_3.rs redef_error2.rs redef_error5.rs -self-path1.rs self-path2.rs sizeof-stray-infer-var-bug.rs struct-expr-parse.rs