From: Philip Herron Date: Thu, 31 Aug 2023 10:33:12 +0000 (+0100) Subject: gccrs: Mark uninit-intrinsic as side-effects X-Git-Tag: basepoints/gcc-15~2186 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7519a5fb37aeb459bad022c9a41dd47b2d5b2b12;p=thirdparty%2Fgcc.git gccrs: Mark uninit-intrinsic as side-effects Ensure the uninit intrinsic does not get optimized away Addresses #1895 gcc/rust/ChangeLog: * backend/rust-compile-intrinsic.cc (uninit_handler): Update fndecl attributes Signed-off-by: Philip Herron --- diff --git a/gcc/rust/backend/rust-compile-intrinsic.cc b/gcc/rust/backend/rust-compile-intrinsic.cc index cbf6c0bb2b86..5b41a3f6b051 100644 --- a/gcc/rust/backend/rust-compile-intrinsic.cc +++ b/gcc/rust/backend/rust-compile-intrinsic.cc @@ -1017,6 +1017,10 @@ uninit_handler (Context *ctx, TyTy::FnType *fntype) auto fndecl = compile_intrinsic_function (ctx, fntype); + // Most intrinsic functions are pure - not `uninit_handler` + TREE_READONLY (fndecl) = 0; + TREE_SIDE_EFFECTS (fndecl) = 1; + // get the template parameter type tree fn uninit(); rust_assert (fntype->get_num_substitutions () == 1); auto ¶m_mapping = fntype->get_substs ().at (0); @@ -1055,9 +1059,6 @@ uninit_handler (Context *ctx, TyTy::FnType *fntype) tree memset_call = build_call_expr_loc (BUILTINS_LOCATION, memset_builtin, 3, dst_addr, constant_byte, size_expr); - TREE_READONLY (memset_call) = 0; - TREE_SIDE_EFFECTS (memset_call) = 1; - ctx->add_statement (memset_call); auto return_statement