aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPhilip Herron <herron.philip@googlemail.com>2023-08-31 11:33:12 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2024-01-16 19:00:34 +0100
commit7519a5fb37aeb459bad022c9a41dd47b2d5b2b12 (patch)
tree14db67f591baa74424fb3b6d3a0c24107855c111 /gcc
parent215b6acecb609d2a424e36116f1be8cf30d53438 (diff)
downloadgcc-7519a5fb37aeb459bad022c9a41dd47b2d5b2b12.zip
gcc-7519a5fb37aeb459bad022c9a41dd47b2d5b2b12.tar.gz
gcc-7519a5fb37aeb459bad022c9a41dd47b2d5b2b12.tar.bz2
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 <herron.philip@googlemail.com>
Diffstat (limited to 'gcc')
-rw-r--r--gcc/rust/backend/rust-compile-intrinsic.cc7
1 files changed, 4 insertions, 3 deletions
diff --git a/gcc/rust/backend/rust-compile-intrinsic.cc b/gcc/rust/backend/rust-compile-intrinsic.cc
index cbf6c0b..5b41a3f 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<T>();
rust_assert (fntype->get_num_substitutions () == 1);
auto &param_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