]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
a68: avoid uninitialized save_expr in a68_bits_shift [PR algol68/124028]
authorJose E. Marchesi <jemarch@gnu.org>
Mon, 9 Feb 2026 23:30:04 +0000 (00:30 +0100)
committerJose E. Marchesi <jemarch@gnu.org>
Mon, 9 Feb 2026 23:30:04 +0000 (00:30 +0100)
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.

gcc/algol68/a68-low-bits.cc
gcc/testsuite/algol68/execute/bits-shift-4.a68 [new file with mode: 0644]

index 81b4f98c4fa0c5ba1644b7a4018340079f919044..1857b830cb16e8d9be05138431040ab7da6e71c7 100644 (file)
@@ -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 (file)
index 0000000..87188fb
--- /dev/null
@@ -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