[gcc r16-7421] a68: avoid uninitialized save_expr in a68_bits_shift [PR algol68/124028]

Jose E. Marchesi jemarch@gcc.gnu.org
Mon Feb 9 23:32:11 GMT 2026


https://gcc.gnu.org/g:5269ab4a7c30aa5e57dc650d44363023ddcec56d

commit r16-7421-g5269ab4a7c30aa5e57dc650d44363023ddcec56d
Author: Jose E. Marchesi <jemarch@gnu.org>
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 <jemarch@gnu.org>
    
    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


More information about the Gcc-cvs mailing list