]> git.ipfire.org Git - thirdparty/gcc.git/commit
a68: fix bit-shift standard operators [PR algol68/123959]
authorJose E. Marchesi <jemarch@gnu.org>
Wed, 4 Feb 2026 09:18:14 +0000 (10:18 +0100)
committerJose E. Marchesi <jemarch@gnu.org>
Thu, 5 Feb 2026 09:43:17 +0000 (10:43 +0100)
commit5a3bf2217b649087670ed2e6079bc06f9209db0c
tree79bc261014b544f4fc41407846f2b1f1e892c8a5
parentf40a87f0a48cb11219ed13658d555875e6721cae
a68: fix bit-shift standard operators [PR algol68/123959]

In Standard Algol 68:

- ABS (b) < bits_width results in the expected result.
- ABS (b) = bits_width results in all bits set to zero.
- ABS (b) > bits_width is undefined.

In GNU algol 68:

- ABS (b) < bits_width results in the expected result.
- ABS (b) >= bits_width results in all bits set to zero.

Our behavior is:

1. Conformant and backwards compatible.

2. Matches well with the similar extension of skip of integral, bits,
   real, etc values to always yield zeroes.

3. Intuitive.

This patch fixes the lowering of the standard operators SHR and SHL
accordingly, including an update for the manual and a few tests.

Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/algol68/ChangeLog

PR algol68/123959
* a68.h: Expand prototype of a68_bits_shift to get a node argument
for location purposes.
* a68-low-bits.cc (a68_bits_shift): Implement RR compatible
semantics.
* a68-low-prelude.cc (a68_lower_shl3): Fix call to a68_bit_shift.
(a68_lower_shr3): Likewise.
* ga68.texi (Bits operators): Fix documentation of SHR and SHL.

gcc/testsuite/ChangeLog

PR algol68/123959
* algol68/execute/bits-shift-1.a68: New test.
* algol68/execute/bits-shift-2.a68: Likewise.
* algol68/execute/bits-shift-3.a68: Likewise.
gcc/algol68/a68-low-bits.cc
gcc/algol68/a68-low-prelude.cc
gcc/algol68/a68.h
gcc/algol68/ga68.texi
gcc/testsuite/algol68/execute/bits-shift-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/bits-shift-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/bits-shift-3.a68 [new file with mode: 0644]