diff options
author | Philip Herron <herron.philip@googlemail.com> | 2025-03-31 17:58:24 +0100 |
---|---|---|
committer | Philip Herron <philip.herron@embecosm.com> | 2025-04-01 10:43:04 +0000 |
commit | eecf0cd6857d269fc9be9a858f2ba02189d756cc (patch) | |
tree | c7f3a268a36ecdd051e761821e24b5f40a301928 /gcc/rust/rust-gcc.cc | |
parent | bdfdaef9069a557ac47384c1a845a9e3dcf02ccc (diff) | |
download | gcc-eecf0cd6857d269fc9be9a858f2ba02189d756cc.zip gcc-eecf0cd6857d269fc9be9a858f2ba02189d756cc.tar.gz gcc-eecf0cd6857d269fc9be9a858f2ba02189d756cc.tar.bz2 |
gccrs: Fix ICE when doing shift checks on const decl
Const decls are just delcarations wrapping the value into the DECL_INITIAL
and the shift checks we have assume no decls are involved and its just flat
values. This patch simply unwraps the constant values if they exist.
Fixes Rust-GCC#3665
gcc/rust/ChangeLog:
* rust-gcc.cc (arithmetic_or_logical_expression): unwrap const decls
gcc/testsuite/ChangeLog:
* rust/compile/issue-3665.rs: New test.
Signed-off-by: Philip Herron <herron.philip@googlemail.com>
Diffstat (limited to 'gcc/rust/rust-gcc.cc')
-rw-r--r-- | gcc/rust/rust-gcc.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/rust/rust-gcc.cc b/gcc/rust/rust-gcc.cc index 1efd872..3b0cd5b 100644 --- a/gcc/rust/rust-gcc.cc +++ b/gcc/rust/rust-gcc.cc @@ -1074,6 +1074,12 @@ arithmetic_or_logical_expression (ArithmeticOrLogicalOperator op, tree left, if (left == error_mark_node || right == error_mark_node) return error_mark_node; + // unwrap the const decls if set + if (TREE_CODE (left) == CONST_DECL) + left = DECL_INITIAL (left); + if (TREE_CODE (right) == CONST_DECL) + right = DECL_INITIAL (right); + /* We need to determine if we're doing floating point arithmetics of integer arithmetics. */ bool floating_point = is_floating_point (left); |