From: Philip Herron Date: Fri, 5 May 2023 15:54:28 +0000 (+0100) Subject: gccrs: Add missing compile locals for constants and statics X-Git-Tag: basepoints/gcc-15~2581 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=de9c1ff6d590c871eda5fe0da56efce0735e81fc;p=thirdparty%2Fgcc.git gccrs: Add missing compile locals for constants and statics When we have a block expression for cosntants or statics we need to ensure we compile the locals for the implicit function we generate in GIMPLE before feeding it directly into the constant folder to evaluate the data. Fixes #2178 gcc/rust/ChangeLog: * backend/rust-compile-base.cc: add missing compile_locals call gcc/testsuite/ChangeLog: * rust/compile/issue-2178.rs: New test. Signed-off-by: Philip Herron --- diff --git a/gcc/rust/backend/rust-compile-base.cc b/gcc/rust/backend/rust-compile-base.cc index 23ddc07738c0..60ae25c87e39 100644 --- a/gcc/rust/backend/rust-compile-base.cc +++ b/gcc/rust/backend/rust-compile-base.cc @@ -666,8 +666,8 @@ HIRCompileBase::compile_constant_item ( = ctx->get_backend ()->function (compiled_fn_type, ident, "", 0, locus); TREE_READONLY (fndecl) = 1; + std::vector locals; tree enclosing_scope = NULL_TREE; - Location start_location = const_value_expr->get_locus (); Location end_location = const_value_expr->get_locus (); if (is_block_expr) @@ -676,9 +676,16 @@ HIRCompileBase::compile_constant_item ( = static_cast (const_value_expr); start_location = function_body->get_locus (); end_location = function_body->get_end_locus (); + + Resolver::Rib *rib = nullptr; + bool ok = ctx->get_resolver ()->find_name_rib ( + function_body->get_mappings ().get_nodeid (), &rib); + rust_assert (ok); + + locals = compile_locals_for_block (ctx, *rib, fndecl); } - tree code_block = ctx->get_backend ()->block (fndecl, enclosing_scope, {}, + tree code_block = ctx->get_backend ()->block (fndecl, enclosing_scope, locals, start_location, end_location); ctx->push_block (code_block); diff --git a/gcc/testsuite/rust/compile/issue-2178.rs b/gcc/testsuite/rust/compile/issue-2178.rs new file mode 100644 index 000000000000..faa22288b2b7 --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-2178.rs @@ -0,0 +1,10 @@ +const A: usize = { + // { dg-warning "unused name" "" { target *-*-* } .-1 } + let x = 23; + x +}; + +static B: usize = { + let x = 23; + x +};