https://gcc.gnu.org/g:5269ab4a7c30aa5e57dc650d44363023ddcec56d
commit r16-7421-g5269ab4a7c30aa5e57dc650d44363023ddcec56d Author: Jose E. Marchesi <[email protected]> Date: Tue Feb 10 00:30:04 2026 +0100 a68: avoid uninitialized save_expr in a68_bits_shift [PR algol68/124028] Signed-off-by: Jose E. Marchesi <[email protected]> gcc/algol68/ChangeLog PR algol68/124028 * a68-low-bits.cc (a68_bits_shift): Avoid uninitialized save_expr. gcc/testsuite/ChangeLog PR algol68/124028 * algol68/execute/bits-shift-4.a68: New test. Diff: --- gcc/algol68/a68-low-bits.cc | 14 ++++++++------ gcc/testsuite/algol68/execute/bits-shift-4.a68 | 10 ++++++++++ 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gcc/algol68/a68-low-bits.cc b/gcc/algol68/a68-low-bits.cc index 81b4f98c4fa0..1857b830cb16 100644 --- a/gcc/algol68/a68-low-bits.cc +++ b/gcc/algol68/a68-low-bits.cc @@ -283,12 +283,14 @@ a68_bits_shift (NODE_T *p, tree shift, tree bits) shift, build_zero_cst (shift_type)), shifted_right, shifted_left); - return fold_build3_loc (a68_get_node_location (p), - COND_EXPR, - TREE_TYPE (bits), - fold_build2 (LT_EXPR, TREE_TYPE (abs_shift), - abs_shift, a68_bits_width (bits_type)), - shifted_bits, build_zero_cst (bits_type)); + return fold_build2 (COMPOUND_EXPR, TREE_TYPE (bits), + bits, + fold_build3_loc (a68_get_node_location (p), + COND_EXPR, + TREE_TYPE (bits), + fold_build2 (LT_EXPR, TREE_TYPE (abs_shift), + abs_shift, a68_bits_width (bits_type)), + shifted_bits, build_zero_cst (bits_type))); } /* Given two bits values, build an expression that calculates whether A = B. */ diff --git a/gcc/testsuite/algol68/execute/bits-shift-4.a68 b/gcc/testsuite/algol68/execute/bits-shift-4.a68 new file mode 100644 index 000000000000..87188fbf2ddf --- /dev/null +++ b/gcc/testsuite/algol68/execute/bits-shift-4.a68 @@ -0,0 +1,10 @@ +begin + int shft := 2; + + int i := 12; + bits x = BIN i; + int j := Abs(x Shl 2); + int k := Abs(x Shl shft); + + assert (j = k) +end
