]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
a68: testsuite: execution tests 2/2
authorJose E. Marchesi <jose.marchesi@oracle.com>
Sat, 11 Oct 2025 17:57:22 +0000 (19:57 +0200)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Sun, 30 Nov 2025 00:52:22 +0000 (01:52 +0100)
Signed-off-by: Jose E. Marchesi <jemarch@gnu.org>
gcc/testsuite/ChangeLog

* algol68/execute/loop-7.a68: New file.
* algol68/execute/loop-8.a68: Likewise.
* algol68/execute/loop-9.a68: Likewise.
* algol68/execute/loop-overflow-underflow.a68: Likewise.
* algol68/execute/lt-int-1.a68: Likewise.
* algol68/execute/lt-string-stride-1.a68: Likewise.
* algol68/execute/lwb-1.a68: Likewise.
* algol68/execute/minus-int-1.a68: Likewise.
* algol68/execute/minusab-1.a68: Likewise.
* algol68/execute/minusab-2.a68: Likewise.
* algol68/execute/minusab-3.a68: Likewise.
* algol68/execute/minusab-4.a68: Likewise.
* algol68/execute/mod-int-1.a68: Likewise.
* algol68/execute/modab-1.a68: Likewise.
* algol68/execute/modab-2.a68: Likewise.
* algol68/execute/mode-indication-1.a68: Likewise.
* algol68/execute/mult-char-1.a68: Likewise.
* algol68/execute/mult-int-1.a68: Likewise.
* algol68/execute/mult-string-1.a68: Likewise.
* algol68/execute/mult-string-2.a68: Likewise.
* algol68/execute/mult-string-3.a68: Likewise.
* algol68/execute/mult-string-4.a68: Likewise.
* algol68/execute/multab-1.a68: Likewise.
* algol68/execute/multab-2.a68: Likewise.
* algol68/execute/multab-3.a68: Likewise.
* algol68/execute/mutual-recursion-1.a68: Likewise.
* algol68/execute/ne-bits-1.a68: Likewise.
* algol68/execute/ne-char-char-1.a68: Likewise.
* algol68/execute/ne-int-1.a68: Likewise.
* algol68/execute/ne-string-1.a68: Likewise.
* algol68/execute/neg-int-1.a68: Likewise.
* algol68/execute/not-bits-1.a68: Likewise.
* algol68/execute/odd-1.a68: Likewise.
* algol68/execute/op-1.a68: Likewise.
* algol68/execute/op-2.a68: Likewise.
* algol68/execute/op-3.a68: Likewise.
* algol68/execute/operator-declaration-1.a68: Likewise.
* algol68/execute/or-bits-1.a68: Likewise.
* algol68/execute/orf-1.a68: Likewise.
* algol68/execute/over-int-1.a68: Likewise.
* algol68/execute/overab-1.a68: Likewise.
* algol68/execute/overab-2.a68: Likewise.
* algol68/execute/particular-program-1.a68: Likewise.
* algol68/execute/plus-char-1.a68: Likewise.
* algol68/execute/plus-int-1.a68: Likewise.
* algol68/execute/plus-string-1.a68: Likewise.
* algol68/execute/plus-string-2.a68: Likewise.
* algol68/execute/plus-string-stride-1.a68: Likewise.
* algol68/execute/plusab-1.a68: Likewise.
* algol68/execute/plusab-2.a68: Likewise.
* algol68/execute/plusab-3.a68: Likewise.
* algol68/execute/plusab-4.a68: Likewise.
* algol68/execute/plusab-string-1.a68: Likewise.
* algol68/execute/plusto-char-1.a68: Likewise.
* algol68/execute/plusto-string-1.a68: Likewise.
* algol68/execute/posix-argc-argv-1.a68: Likewise.
* algol68/execute/posix-fopen-1.a68: Likewise.
* algol68/execute/posix-fputc-fputs-1.a68: Likewise.
* algol68/execute/posix-getenv-1.a68: Likewise.
* algol68/execute/posix-perror-1.a68: Likewise.
* algol68/execute/posix-putchar-1.a68: Likewise.
* algol68/execute/posix-stdinouterr-1.a68: Likewise.
* algol68/execute/posix-strerror-1.a68: Likewise.
* algol68/execute/posix-stride-1.a68: Likewise.
* algol68/execute/pow-int-1.a68: Likewise.
* algol68/execute/pow-real-1.a68: Likewise.
* algol68/execute/proc-1.a68: Likewise.
* algol68/execute/proc-10.a68: Likewise.
* algol68/execute/proc-12.a68: Likewise.
* algol68/execute/proc-13.a68: Likewise.
* algol68/execute/proc-14.a68: Likewise.
* algol68/execute/proc-15.a68: Likewise.
* algol68/execute/proc-16.a68: Likewise.
* algol68/execute/proc-17.a68: Likewise.
* algol68/execute/proc-18.a68: Likewise.
* algol68/execute/proc-19.a68: Likewise.
* algol68/execute/proc-2.a68: Likewise.
* algol68/execute/proc-20.a68: Likewise.
* algol68/execute/proc-21.a68: Likewise.
* algol68/execute/proc-22.a68: Likewise.
* algol68/execute/proc-23.a68: Likewise.
* algol68/execute/proc-25.a68: Likewise.
* algol68/execute/proc-26.a68: Likewise.
* algol68/execute/proc-27.a68: Likewise.
* algol68/execute/proc-28.a68: Likewise.
* algol68/execute/proc-29.a68: Likewise.
* algol68/execute/proc-3.a68: Likewise.
* algol68/execute/proc-4.a68: Likewise.
* algol68/execute/proc-5.a68: Likewise.
* algol68/execute/proc-6.a68: Likewise.
* algol68/execute/proc-7.a68: Likewise.
* algol68/execute/proc-8.a68: Likewise.
* algol68/execute/procedured-goto-1.a68: Likewise.
* algol68/execute/quine.a68: Likewise.
* algol68/execute/random-1.a68: Likewise.
* algol68/execute/re-im-1.a68: Likewise.
* algol68/execute/rela-string-1.a68: Likewise.
* algol68/execute/repr-1.a68: Likewise.
* algol68/execute/round-1.a68: Likewise.
* algol68/execute/row-display-1.a68: Likewise.
* algol68/execute/row-display-2.a68: Likewise.
* algol68/execute/row-display-3.a68: Likewise.
* algol68/execute/row-display-4.a68: Likewise.
* algol68/execute/row-display-5.a68: Likewise.
* algol68/execute/rowing-1.a68: Likewise.
* algol68/execute/rowing-10.a68: Likewise.
* algol68/execute/rowing-11.a68: Likewise.
* algol68/execute/rowing-12.a68: Likewise.
* algol68/execute/rowing-13.a68: Likewise.
* algol68/execute/rowing-2.a68: Likewise.
* algol68/execute/rowing-3.a68: Likewise.
* algol68/execute/rowing-4.a68: Likewise.
* algol68/execute/rowing-5.a68: Likewise.
* algol68/execute/rowing-6.a68: Likewise.
* algol68/execute/rowing-7.a68: Likewise.
* algol68/execute/rowing-8.a68: Likewise.
* algol68/execute/rowing-9.a68: Likewise.
* algol68/execute/selection-1.a68: Likewise.
* algol68/execute/selection-2.a68: Likewise.
* algol68/execute/selection-3.a68: Likewise.
* algol68/execute/selection-4.a68: Likewise.
* algol68/execute/selection-5.a68: Likewise.
* algol68/execute/selection-multiple-1.a68: Likewise.
* algol68/execute/selection-multiple-2.a68: Likewise.
* algol68/execute/serial-clause-1.a68: Likewise.
* algol68/execute/serial-clause-10.a68: Likewise.
* algol68/execute/serial-clause-2.a68: Likewise.
* algol68/execute/serial-clause-3.a68: Likewise.
* algol68/execute/serial-clause-4.a68: Likewise.
* algol68/execute/serial-clause-5.a68: Likewise.
* algol68/execute/serial-clause-6.a68: Likewise.
* algol68/execute/serial-clause-7.a68: Likewise.
* algol68/execute/serial-clause-8.a68: Likewise.
* algol68/execute/serial-clause-9.a68: Likewise.
* algol68/execute/serial-dsa-1.a68: Likewise.
* algol68/execute/serial-dsa-2.a68: Likewise.
* algol68/execute/serial-dsa-3.a68: Likewise.
* algol68/execute/serial-dsa-4.a68: Likewise.
* algol68/execute/serial-dsa-5.a68: Likewise.
* algol68/execute/serial-dsa-6.a68: Likewise.
* algol68/execute/sign-int-1.a68: Likewise.
* algol68/execute/sign-real-1.a68: Likewise.
* algol68/execute/sin-1.a68: Likewise.
* algol68/execute/skip-1.a68: Likewise.
* algol68/execute/skip-2.a68: Likewise.
* algol68/execute/skip-struct-1.a68: Likewise.
* algol68/execute/slice-indexing-1.a68: Likewise.
* algol68/execute/slice-indexing-2.a68: Likewise.
* algol68/execute/slice-indexing-3.a68: Likewise.
* algol68/execute/slice-indexing-4.a68: Likewise.
* algol68/execute/slice-indexing-5.a68: Likewise.
* algol68/execute/slice-indexing-6.a68: Likewise.
* algol68/execute/slice-indexing-7.a68: Likewise.
* algol68/execute/sqrt-1.a68: Likewise.
* algol68/execute/string-1.a68: Likewise.
* algol68/execute/string-2.a68: Likewise.
* algol68/execute/string-4.a68: Likewise.
* algol68/execute/string-break-1.a68: Likewise.
* algol68/execute/struct-self-1.a68: Likewise.
* algol68/execute/struct-self-2.a68: Likewise.
* algol68/execute/struct-self-3.a68: Likewise.
* algol68/execute/structure-display-1.a68: Likewise.
* algol68/execute/structure-display-2.a68: Likewise.
* algol68/execute/structure-display-3.a68: Likewise.
* algol68/execute/structure-display-4.a68: Likewise.
* algol68/execute/structure-display-5.a68: Likewise.
* algol68/execute/tan-1.a68: Likewise.
* algol68/execute/timesab-string-1.a68: Likewise.
* algol68/execute/trimmer-1.a68: Likewise.
* algol68/execute/trimmer-10.a68: Likewise.
* algol68/execute/trimmer-2.a68: Likewise.
* algol68/execute/trimmer-3.a68: Likewise.
* algol68/execute/trimmer-4.a68: Likewise.
* algol68/execute/trimmer-5.a68: Likewise.
* algol68/execute/trimmer-6.a68: Likewise.
* algol68/execute/trimmer-7.a68: Likewise.
* algol68/execute/trimmer-8.a68: Likewise.
* algol68/execute/trimmer-9.a68: Likewise.
* algol68/execute/trimmer-matrix-1.a68: Likewise.
* algol68/execute/trimmer-matrix-2.a68: Likewise.
* algol68/execute/trimmer-matrix-3.a68: Likewise.
* algol68/execute/trimmer-matrix-4.a68: Likewise.
* algol68/execute/trimmer-matrix-5.a68: Likewise.
* algol68/execute/trimmer-matrix-6.a68: Likewise.
* algol68/execute/trimmer-name-1.a68: Likewise.
* algol68/execute/undefined-1.a68: Likewise.
* algol68/execute/undefined-2.a68: Likewise.
* algol68/execute/undefined-3.a68: Likewise.
* algol68/execute/undefined-4.a68: Likewise.
* algol68/execute/undefined-5.a68: Likewise.
* algol68/execute/uniting-1.a68: Likewise.
* algol68/execute/uniting-2.a68: Likewise.
* algol68/execute/uniting-3.a68: Likewise.
* algol68/execute/uniting-4.a68: Likewise.
* algol68/execute/up-down-bits-1.a68: Likewise.
* algol68/execute/upb-1.a68: Likewise.
* algol68/execute/vacuum-1.a68: Likewise.
* algol68/execute/variable-declaration-1.a68: Likewise.
* algol68/execute/variable-declaration-2.a68: Likewise.
* algol68/execute/variable-declaration-3.a68: Likewise.
* algol68/execute/variable-declaration-4.a68: Likewise.
* algol68/execute/variable-declaration-5.a68: Likewise.
* algol68/execute/variable-declaration-6.a68: Likewise.
* algol68/execute/variable-declaration-heap-1.a68: Likewise.
* algol68/execute/variable-declaration-heap-2.a68: Likewise.
* algol68/execute/variable-declaration-multiple-1.a68: Likewise.
* algol68/execute/variable-declaration-multiple-2.a68: Likewise.
* algol68/execute/variable-declaration-multiple-3.a68: Likewise.
* algol68/execute/variable-declaration-multiple-4.a68: Likewise.
* algol68/execute/variable-declaration-multiple-5.a68: Likewise.
* algol68/execute/variable-declaration-multiple-6.a68: Likewise.
* algol68/execute/variable-declaration-multiple-7.a68: Likewise.
* algol68/execute/variable-declaration-multiple-8.a68: Likewise.
* algol68/execute/variable-declaration-multiple-9.a68: Likewise.
* algol68/execute/voiding-1.a68: Likewise.
* algol68/execute/widening-1.a68: Likewise.
* algol68/execute/widening-2.a68: Likewise.
* algol68/execute/widening-bits-1.a68: Likewise.
* algol68/execute/widening-bits-2.a68: Likewise.
* algol68/execute/widening-bits-3.a68: Likewise.
* algol68/execute/xor-bits-1.a68: Likewise.
* algol68/execute/environment-enquiries-8.a68: Likewise.

255 files changed:
gcc/testsuite/algol68/execute/environment-enquiries-8.a68
gcc/testsuite/algol68/execute/loop-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/loop-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/loop-9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/loop-overflow-underflow.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/lt-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/lt-string-stride-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/lwb-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/minus-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/minusab-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/minusab-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/minusab-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/minusab-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mod-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modab-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modab-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mode-indication-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/README [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/execute.exp [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module11.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module12.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module13.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module14.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module15.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module16.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module17.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/module9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-11.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-12.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-15.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-16.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-17.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/modules/program-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-char-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-string-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-string-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mult-string-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/multab-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/multab-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/multab-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/mutual-recursion-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/ne-bits-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/ne-char-char-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/ne-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/ne-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/neg-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/not-bits-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/odd-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/op-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/op-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/op-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/operator-declaration-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/or-bits-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/orf-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/over-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/overab-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/overab-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/particular-program-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plus-char-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plus-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plus-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plus-string-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plus-string-stride-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusab-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusab-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusab-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusab-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusab-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusto-char-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/plusto-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-argc-argv-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-fopen-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-fputc-fputs-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-getenv-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-lseek.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-perror-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-putchar-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-stdinouterr-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-strerror-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/posix-stride-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/pow-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/pow-real-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-12.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-13.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-14.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-15.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-16.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-17.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-18.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-19.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-20.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-21.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-22.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-23.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-25.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-26.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-27.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-28.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-29.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/proc-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/procedured-goto-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/quine.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/random-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/re-im-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rela-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/repr-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/round-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/row-display-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/row-display-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/row-display-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/row-display-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/row-display-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-11.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-12.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-13.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/rowing-9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-multiple-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/selection-multiple-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-clause-9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/serial-dsa-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/sign-int-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/sign-real-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/sin-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/skip-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/skip-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/skip-struct-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/slice-indexing-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/sqrt-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/string-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/string-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/string-break-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/struct-self-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/struct-self-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/struct-self-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/structure-display-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/structure-display-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/structure-display-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/structure-display-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/structure-display-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/tan-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/timesab-string-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-10.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-matrix-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/trimmer-name-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/undefined-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/undefined-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/undefined-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/undefined-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/undefined-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/uniting-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/uniting-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/uniting-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/uniting-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/up-down-bits-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/upb-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/vacuum-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-heap-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-heap-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-4.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-5.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-6.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-7.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-8.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/variable-declaration-multiple-9.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/voiding-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/widening-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/widening-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/widening-bits-1.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/widening-bits-2.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/widening-bits-3.a68 [new file with mode: 0644]
gcc/testsuite/algol68/execute/xor-bits-1.a68 [new file with mode: 0644]

index d464a49d9907c61dc50166142e2831c9a348dd5d..8c2c904793d14637f767e6f476e48908446bb3c9 100644 (file)
@@ -2,5 +2,5 @@
 BEGIN ASSERT (flip = "T");
       ASSERT (flop = "F");
       ASSERT (error char = "*");
-      ASSERT (ABS invalid char = ABS 16rfffd)
+      ASSERT (ABS replacement char = ABS 16rfffd)
 END
diff --git a/gcc/testsuite/algol68/execute/loop-7.a68 b/gcc/testsuite/algol68/execute/loop-7.a68
new file mode 100644 (file)
index 0000000..3d5112e
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0, n := 5;
+      TO n + 1 DO i +:= 1 OD;
+      ASSERT (i = 6)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-8.a68 b/gcc/testsuite/algol68/execute/loop-8.a68
new file mode 100644 (file)
index 0000000..e7d0901
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0, n := 2;
+      FOR a TO n + 1 DO i +:= a OD;
+      ASSERT (i = 1 + 2 + 3)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-9.a68 b/gcc/testsuite/algol68/execute/loop-9.a68
new file mode 100644 (file)
index 0000000..a101db2
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0, n := 2;
+      FOR a FROM n TO n + 2 DO i +:= a OD;
+      ASSERT (i = 2 + 3 + 4)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-overflow-underflow.a68 b/gcc/testsuite/algol68/execute/loop-overflow-underflow.a68
new file mode 100644 (file)
index 0000000..1ace68a
--- /dev/null
@@ -0,0 +1,55 @@
+{ Test for overflow/underflow in loops with implicit and explicit
+  iterators. }
+
+begin int count;
+
+      { Overflow.  }
+      count := 0;
+      by 1 while true do count +:= 1 od;
+      assert (count = max_int);
+
+      count := 0;
+      from max_int do count +:= 1 od;
+      assert (count = 1);
+      count := 0;
+
+      by max_int do count +:= 1 od;
+      assert (count = 1);
+
+      count := 0;
+      for i by max_int do count +:= 1 od;
+      assert (count = 1);
+
+      count := 0;
+      by max_int % 2 do count +:= 1 od;
+      assert (count = 3);
+
+      count := 0;
+      by max_int - 1 do count +:= 1 od;
+      assert (count = 2);
+
+      { Underflow.  }
+      count := 0;
+      by -1 while true do count +:= 1 od;
+      assert (count = -min_int + 2);
+
+      count := 0;
+      from min_int by -1 do count +:= 1 od;
+      assert (count = 1);
+      count := 0;
+
+      by min_int do count +:= 1 od;
+      assert (count = 2);
+
+      count := 0;
+      for i by min_int do count +:= 1 od;
+      assert (count = 2);
+
+      count := 0;
+      by min_int % 2 do count +:= 1 od;
+      assert (count = 3);
+
+      count := 0;
+      by min_int + 1 do count +:= 1 od;
+      assert (count = 2)
+end
diff --git a/gcc/testsuite/algol68/execute/lt-int-1.a68 b/gcc/testsuite/algol68/execute/lt-int-1.a68
new file mode 100644 (file)
index 0000000..c0e9302
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 12;
+      LONG INT ii = LONG 12, LONG LONG INT iii = LONG LONG 12;
+      SHORT INT s = SHORT 12, SHORT SHORT INT ss = SHORT SHORT 12;
+      ASSERT (i < 13);
+      ASSERT (ii LT LONG 13);
+      ASSERT (iii < LONG LONG 13);
+      ASSERT (s < SHORT 13);
+      ASSERT (ss < SHORT SHORT 13)
+END
diff --git a/gcc/testsuite/algol68/execute/lt-string-stride-1.a68 b/gcc/testsuite/algol68/execute/lt-string-stride-1.a68
new file mode 100644 (file)
index 0000000..9109f67
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1", "Z", "1"),
+                        ("4", "Y", "4"),
+                        ("7", "X", "9"));
+      ASSERT (matrix[1:3,1] < matrix[1:3,3]);
+      ASSERT (("1","4","0") < matrix[1:3,3])
+END
diff --git a/gcc/testsuite/algol68/execute/lwb-1.a68 b/gcc/testsuite/algol68/execute/lwb-1.a68
new file mode 100644 (file)
index 0000000..c3dd594
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (LWB "foo" = 1);
+      ASSERT (LWB "" = 1);
+      ASSERT (1 LWB "foo" = 1);
+      ASSERT (1 LWB "" = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/minus-int-1.a68 b/gcc/testsuite/algol68/execute/minus-int-1.a68
new file mode 100644 (file)
index 0000000..abaf122
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (i - 2 = 8);
+      ASSERT (ii - LONG 2 = LONG 8);
+      ASSERT (iii - LONG LONG 2 = LONG LONG 8);
+      ASSERT (ss - SHORT 2 = SHORT 8);
+      ASSERT (sss - SHORT SHORT 2 = SHORT SHORT 8)
+END
diff --git a/gcc/testsuite/algol68/execute/minusab-1.a68 b/gcc/testsuite/algol68/execute/minusab-1.a68
new file mode 100644 (file)
index 0000000..0eb1661
--- /dev/null
@@ -0,0 +1,32 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN INT i := 10;
+            i -:= 2;
+            ASSERT (i = 8);
+            i MINUSAB 2;
+            ASSERT (i = 6)
+      END;
+      BEGIN LONG INT i := LONG 1000;
+            i -:= LONG 100;
+            ASSERT (i = LONG 900);
+            i MINUSAB LONG 100;
+            ASSERT (i = LONG 800)
+      END;
+      BEGIN LONG LONG INT i := LONG LONG 10000;
+            i -:= LONG LONG 1000;
+            ASSERT (i = LONG LONG 9000);
+            i MINUSAB LONG LONG 1000;
+            ASSERT (i = LONG LONG 8000)
+      END;
+      BEGIN SHORT INT i := SHORT 100;
+            i -:= SHORT 10;
+            ASSERT (i = SHORT 90);
+            i MINUSAB SHORT 10;
+            ASSERT (i = SHORT 80)
+      END;
+      BEGIN SHORT SHORT INT i := SHORT SHORT 10;
+            i -:= SHORT SHORT 1;
+            ASSERT (i = SHORT SHORT 9);
+            i MINUSAB SHORT SHORT 2;
+            ASSERT (i = SHORT SHORT 7)
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/minusab-2.a68 b/gcc/testsuite/algol68/execute/minusab-2.a68
new file mode 100644 (file)
index 0000000..2fee755
--- /dev/null
@@ -0,0 +1,20 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN REAL i := 10.0;
+            i -:= 2.0;
+            ASSERT (i = 8.0);
+            i MINUSAB 2.0;
+            ASSERT (i = 6.0)
+      END;
+      BEGIN LONG REAL i := LONG 1000.0;
+            i -:= LONG 100.0;
+            ASSERT (i = LONG 900.0);
+            i MINUSAB LONG 100.0;
+            ASSERT (i = LONG 800.0)
+      END;
+      BEGIN LONG LONG REAL i := LONG LONG 10000.0;
+            i -:= LONG LONG 1000.0;
+            ASSERT (i = LONG LONG 9000.0);
+            i MINUSAB LONG LONG 1000.0;
+            ASSERT (i = LONG LONG 8000.0)
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/minusab-3.a68 b/gcc/testsuite/algol68/execute/minusab-3.a68
new file mode 100644 (file)
index 0000000..08d020d
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 10;
+      (((n -:= 1))) := 5;
+      ASSERT (n = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/minusab-4.a68 b/gcc/testsuite/algol68/execute/minusab-4.a68
new file mode 100644 (file)
index 0000000..4330908
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT num ints := 10;
+      num ints -:= 1;
+      ASSERT (num ints = 9);
+      ASSERT ((LOC INT -:= 12) = -12)
+END
diff --git a/gcc/testsuite/algol68/execute/mod-int-1.a68 b/gcc/testsuite/algol68/execute/mod-int-1.a68
new file mode 100644 (file)
index 0000000..0d8cfe4
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (i %* 3 = 1);
+      ASSERT (ii %* LONG 3 = LONG 1);
+      ASSERT (iii %* LONG LONG 3 = LONG LONG 1);
+      ASSERT (ss %* SHORT 3 = SHORT 1);
+      ASSERT (sss MOD SHORT SHORT 3 = SHORT SHORT 1)
+END
diff --git a/gcc/testsuite/algol68/execute/modab-1.a68 b/gcc/testsuite/algol68/execute/modab-1.a68
new file mode 100644 (file)
index 0000000..41c49b0
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN (SHORT SHORT INT i := SHORT SHORT 11; i MODAB SHORT SHORT 2; ASSERT (i = SHORT SHORT 1));
+      (SHORT INT i := SHORT 11; i MODAB SHORT 2; ASSERT (i = SHORT 1));
+      (INT i := 11; i MODAB 2; ASSERT (i = 1));
+      (INT i := 11; i %*:= 2; ASSERT (i = 1));
+      (LONG INT i := LONG 11; i MODAB LONG 2; ASSERT (i = LONG 1));
+      (LONG INT i := LONG 11; i %*:= LONG 2; ASSERT (i = LONG 1));
+      (LONG LONG INT i := LONG LONG 11; i MODAB LONG LONG 2; ASSERT (i = LONG LONG 1));
+      (LONG LONG INT i := LONG LONG 11; i %*:= LONG LONG 2; ASSERT (i = LONG LONG 1))
+END
diff --git a/gcc/testsuite/algol68/execute/modab-2.a68 b/gcc/testsuite/algol68/execute/modab-2.a68
new file mode 100644 (file)
index 0000000..52fc9a1
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 10;
+      (((n MODAB 1))) := 5;
+      ASSERT (n = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/mode-indication-1.a68 b/gcc/testsuite/algol68/execute/mode-indication-1.a68
new file mode 100644 (file)
index 0000000..f1dd8c2
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT j; REAL y;
+      MODE R = REAL;
+      BEGIN MODE R = INT;
+            R i := j;
+            SKIP
+      END;
+      R x := y;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/modules/README b/gcc/testsuite/algol68/execute/modules/README
new file mode 100644 (file)
index 0000000..a22c97c
--- /dev/null
@@ -0,0 +1,7 @@
+This directory contains tests that require using several packets.
+
+Files named module*.a68 contain prelude packets, i.e. the definitions
+of one or more modules.  These are to be referred within test programs
+using dg-modules.
+
+Each program*.a68 file is a testcase.
diff --git a/gcc/testsuite/algol68/execute/modules/execute.exp b/gcc/testsuite/algol68/execute/modules/execute.exp
new file mode 100644 (file)
index 0000000..cf61857
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2024 Free Software Foundation, Inc.
+
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+# 
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+# 
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+# Execute tests, torture testing.
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+load_lib algol68-torture.exp
+load_lib torture-options.exp
+
+torture-init
+set-torture-options $TORTURE_OPTIONS
+
+# The programs need to be able to find the built modules, which are
+# left in objdir.
+global BUILT_MODULES_DIR
+set BUILT_MODULES_DIR "$objdir"
+
+foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/program-*.a68]] {
+    # If we're only testing specific files and this isn't one of them, skip it.
+    if ![runtest_file_p $runtests $testcase] then {
+       continue
+    }
+    algol68-torture-execute $testcase
+    set algol68_compile_args ""
+}
+
+torture-finish
diff --git a/gcc/testsuite/algol68/execute/modules/module1.a68 b/gcc/testsuite/algol68/execute/modules/module1.a68
new file mode 100644 (file)
index 0000000..f49a747
--- /dev/null
@@ -0,0 +1,9 @@
+module Module1 =
+def
+    pub mode MyInt = int;
+    pub int beast_number := 666;
+    pub string who = "jemarch";
+    puts ("Hello from module'n")
+postlude
+    puts ("Bye from module'n")
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module10.a68 b/gcc/testsuite/algol68/execute/modules/module10.a68
new file mode 100644 (file)
index 0000000..5b163ff
--- /dev/null
@@ -0,0 +1,7 @@
+module Module10 =
+access Module9, Module3
+def int je = foo;
+    prio QUUX = 9;
+    pub Lala bar = (bump; getcounter); {11}
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module11.a68 b/gcc/testsuite/algol68/execute/modules/module11.a68
new file mode 100644 (file)
index 0000000..39adb82
--- /dev/null
@@ -0,0 +1,11 @@
+{ Mixing module texts with revelations and without revelations.  }
+
+module Module11 =
+          access Module1, Module3
+          def pub proc someproc = (int a, b) int: a + b;
+              skip
+          postlude
+              skip
+          fed,
+       Foo = def skip postlude skip fed,
+       Bar = def skip fed
diff --git a/gcc/testsuite/algol68/execute/modules/module12.a68 b/gcc/testsuite/algol68/execute/modules/module12.a68
new file mode 100644 (file)
index 0000000..3f849cb
--- /dev/null
@@ -0,0 +1,5 @@
+module Module_12 =
+def pub proc foo = (proc(int,string)void cb, int a) void: cb (a, "Foo");
+    pub proc bar = (real r) void: skip;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module13.a68 b/gcc/testsuite/algol68/execute/modules/module13.a68
new file mode 100644 (file)
index 0000000..9d66fe1
--- /dev/null
@@ -0,0 +1,5 @@
+module Module_13 =
+def
+    pub mode JSON_Val = struct (int i);
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module14.a68 b/gcc/testsuite/algol68/execute/modules/module14.a68
new file mode 100644 (file)
index 0000000..bcb9d2c
--- /dev/null
@@ -0,0 +1,5 @@
+module Module14 =
+access Module13
+def pub proc getval = JSON_Val: skip;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module15.a68 b/gcc/testsuite/algol68/execute/modules/module15.a68
new file mode 100644 (file)
index 0000000..5e42084
--- /dev/null
@@ -0,0 +1,8 @@
+module Module15 =
+access Module13, Module14
+def pub proc foo = int:
+        begin JSON_Val val = getval;
+              i of val
+        end;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module16.a68 b/gcc/testsuite/algol68/execute/modules/module16.a68
new file mode 100644 (file)
index 0000000..d798d4f
--- /dev/null
@@ -0,0 +1,8 @@
+module Module_16 =
+def
+    pub int counter;
+    skip
+postlude
+    assert (counter = 666);
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module17.a68 b/gcc/testsuite/algol68/execute/modules/module17.a68
new file mode 100644 (file)
index 0000000..232ddeb
--- /dev/null
@@ -0,0 +1,13 @@
+module Module =
+def
+    pub int ce_port;
+    pub string ce_host;
+
+    pub proc ce_connect = void:
+           myconnect (ce_host, ce_port);
+
+    proc myconnect = (string host, int port) void:
+       skip;
+
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module3.a68 b/gcc/testsuite/algol68/execute/modules/module3.a68
new file mode 100644 (file)
index 0000000..d4d2066
--- /dev/null
@@ -0,0 +1,11 @@
+module Module_3 =
+def 
+    { variable = 0 in_proc = 1 } pub proc bump = void: counter +:= 1;
+    { variable = 0 in_proc = 1 } pub proc bumptimes = (int n) void: to n do bump od;
+    { variable = 1 in_proc = 0 } pub proc vbump := void: counter +:= 1;
+    { variable = 1 in_proc = 0 } pub proc vbumptimes := (int n) void: to n do vbump od;
+    { variable = 0 in_proc = 1 } pub proc getcounter = int: counter;
+    { variable = 0 in_proc = 0 } pub proc int anothergetcounter = getcounter;
+    int counter := 10;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module4.a68 b/gcc/testsuite/algol68/execute/modules/module4.a68
new file mode 100644 (file)
index 0000000..f4ff315
--- /dev/null
@@ -0,0 +1,4 @@
+module Module_4 =
+def pub int ten = 10;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module5.a68 b/gcc/testsuite/algol68/execute/modules/module5.a68
new file mode 100644 (file)
index 0000000..d0b009a
--- /dev/null
@@ -0,0 +1,7 @@
+module Module_5 =
+def pub prio // = 9;
+    pub op // = (int a, b) int: a + b;
+    pub prio LALA = 9;
+    pub op LALA = (int a, b) int: a - b;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module6.a68 b/gcc/testsuite/algol68/execute/modules/module6.a68
new file mode 100644 (file)
index 0000000..f89d7ac
--- /dev/null
@@ -0,0 +1,5 @@
+module Module_6 =
+def prio // = 9; { Note priority is not publicized.  }
+    pub op // = (int a, b) int: a + b;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module7.a68 b/gcc/testsuite/algol68/execute/modules/module7.a68
new file mode 100644 (file)
index 0000000..c9c2e07
--- /dev/null
@@ -0,0 +1,10 @@
+{ This module exports an operator defined in a non-brief operator
+  declaration.  This means the exported symbol is a pointer to a
+  function and shall be indirected on the accessing side.  }
+
+module Module_7 =
+def pub prio MINUS = 9;
+    pub op (int,int)int MINUS = minus;
+    proc minus = (int a, b) int: a - b;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module8.a68 b/gcc/testsuite/algol68/execute/modules/module8.a68
new file mode 100644 (file)
index 0000000..6936299
--- /dev/null
@@ -0,0 +1,9 @@
+module Module_8 =
+access Module_1, Module_4
+def
+    pub proc checks = void:
+        begin assert (ten = 10);
+              assert (beast_number = 666)
+        end;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/module9.a68 b/gcc/testsuite/algol68/execute/modules/module9.a68
new file mode 100644 (file)
index 0000000..ed59bb8
--- /dev/null
@@ -0,0 +1,8 @@
+module Module9 =
+def pub int foo = 10;
+    pub prio // = 9;
+    pub op QUUX = (int a, b) int: a + b;
+    prio QUUX = 9;
+    pub mode Lala = int;
+    skip
+fed
diff --git a/gcc/testsuite/algol68/execute/modules/program-1.a68 b/gcc/testsuite/algol68/execute/modules/program-1.a68
new file mode 100644 (file)
index 0000000..b385c56
--- /dev/null
@@ -0,0 +1,20 @@
+{ dg-modules "module1" }
+
+begin string je = access Module1 begin who end;
+      string ju = access Module1 ( who );
+      string ji = access Module1 if true then who else who fi;
+      string ja = access Module1 (true | who | who);
+      string aa = access Module1 case 1 in who, "no" esac;
+      mode United = union (void,int);
+      string bb = access Module1 case United (10) in (int): who esac;
+      string cc = access Module1 (1 | who, "no");
+      assert (je = "jemarch");
+      assert (ju = "jemarch");
+      assert (ji = "jemarch");
+      assert (ja = "jemarch");
+      assert (aa = "jemarch");
+      assert (bb = "jemarch");
+      assert (cc = "jemarch");
+      access Module1 to 1 do assert (who = "jemarch") od;
+      access Module1 (assert (beast_number = 666))
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-10.a68 b/gcc/testsuite/algol68/execute/modules/program-10.a68
new file mode 100644 (file)
index 0000000..101d065
--- /dev/null
@@ -0,0 +1,6 @@
+{ dg-modules "module3 module9 module10" }
+
+access Module10
+begin int x = 11;
+      assert (x = bar)
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-11.a68 b/gcc/testsuite/algol68/execute/modules/program-11.a68
new file mode 100644 (file)
index 0000000..ba2e1fe
--- /dev/null
@@ -0,0 +1,3 @@
+{ dg-modules "module1 module3 module11" }
+
+access Module11 ( assert (someproc (2, 3) = 5))
diff --git a/gcc/testsuite/algol68/execute/modules/program-12.a68 b/gcc/testsuite/algol68/execute/modules/program-12.a68
new file mode 100644 (file)
index 0000000..a8a6a4c
--- /dev/null
@@ -0,0 +1,6 @@
+{ dg-modules "module12" }
+
+access Module_12
+begin  proc lala = (int n, string s) void: skip;
+       foo (lala, 10)
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-15.a68 b/gcc/testsuite/algol68/execute/modules/program-15.a68
new file mode 100644 (file)
index 0000000..7b6abaf
--- /dev/null
@@ -0,0 +1,3 @@
+{ dg-modules "module13 module14 module15" }
+
+access Module15 (assert (foo = 0))
diff --git a/gcc/testsuite/algol68/execute/modules/program-16.a68 b/gcc/testsuite/algol68/execute/modules/program-16.a68
new file mode 100644 (file)
index 0000000..dd6ddb6
--- /dev/null
@@ -0,0 +1,8 @@
+{ dg-modules module16 }
+
+access Module_16
+begin assert (counter = 0);
+      counter := 20;
+      access Module_16 (assert (counter = 20));
+      counter := 666
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-17.a68 b/gcc/testsuite/algol68/execute/modules/program-17.a68
new file mode 100644 (file)
index 0000000..90a1728
--- /dev/null
@@ -0,0 +1,7 @@
+{ dg-modules module17 }
+
+access Module17
+begin ce_port := 8888;
+      ce_host := "localhost";
+      ce_connect
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-2.a68 b/gcc/testsuite/algol68/execute/modules/program-2.a68
new file mode 100644 (file)
index 0000000..e0f320c
--- /dev/null
@@ -0,0 +1,15 @@
+{ dg-modules "module1" }
+
+begin int x = 1 + access Module1 ( beast_number);
+      int i = access Module1 ( beast_number ) + 1;
+      int z = 1 + access Module1 if true then beast_number fi;
+      int v = access Module1 if true then beast_number fi + 1;
+      int w = access Module1 if true then beast_number fi
+              + access Module1 if true then beast_number fi;
+      assert (i = 667);
+      assert (x = 667);
+      assert (z = 667);
+      assert (v = 667);
+      assert (w = 666 * 2);
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-3.a68 b/gcc/testsuite/algol68/execute/modules/program-3.a68
new file mode 100644 (file)
index 0000000..b1570bd
--- /dev/null
@@ -0,0 +1,16 @@
+{ dg-modules "module3" }
+
+access Module_3
+begin assert (getcounter = 10);
+      bump;
+      assert (getcounter = 11);
+      bumptimes (3);
+      assert (getcounter = 14)
+      { vbump and vbumptimes are set to non-publicized routines
+        that are local to the module, so it is a scope violation
+        to call them.  }
+{      vbump;
+      assert (getcounter = 15);
+      vbumptimes (10);
+      assert (anothergetcounter = 25) }
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-4.a68 b/gcc/testsuite/algol68/execute/modules/program-4.a68
new file mode 100644 (file)
index 0000000..f207d9c
--- /dev/null
@@ -0,0 +1,7 @@
+{ dg-modules "module4" }
+
+{ The widening coercion "jumps" inside the controlled xclause.  }
+
+begin real realten = access Module_4 (ten);
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-5.a68 b/gcc/testsuite/algol68/execute/modules/program-5.a68
new file mode 100644 (file)
index 0000000..afa49f5
--- /dev/null
@@ -0,0 +1,7 @@
+{ dg-modules "module5" }
+
+access Module_5
+begin assert (2 // 3 = 5);
+      assert (2 LALA 3 = -1);
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-6.a68 b/gcc/testsuite/algol68/execute/modules/program-6.a68
new file mode 100644 (file)
index 0000000..05708fa
--- /dev/null
@@ -0,0 +1,9 @@
+{ dg-modules "module6" }
+
+{ New priority is given to an importe operator.  }
+
+access Module_6
+begin assert (2 // 3 = 5);
+      prio // = 9;
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/modules/program-7.a68 b/gcc/testsuite/algol68/execute/modules/program-7.a68
new file mode 100644 (file)
index 0000000..6a5aa49
--- /dev/null
@@ -0,0 +1,3 @@
+{ dg-modules "module7" }
+
+access Module_7 ( assert (2 MINUS 3 = -1) )
diff --git a/gcc/testsuite/algol68/execute/modules/program-8.a68 b/gcc/testsuite/algol68/execute/modules/program-8.a68
new file mode 100644 (file)
index 0000000..4a50e71
--- /dev/null
@@ -0,0 +1,3 @@
+{ dg-modules "module1 module4 module8" }
+
+access Module_8 (checks)
diff --git a/gcc/testsuite/algol68/execute/mult-char-1.a68 b/gcc/testsuite/algol68/execute/mult-char-1.a68
new file mode 100644 (file)
index 0000000..0e3c1f4
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ("a" * 3 = "aaa");
+      ASSERT ("" * 1 = "");
+      ASSERT ("x" * 0 = "x")
+END
diff --git a/gcc/testsuite/algol68/execute/mult-int-1.a68 b/gcc/testsuite/algol68/execute/mult-int-1.a68
new file mode 100644 (file)
index 0000000..2da2988
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (i * 2 = 20);
+      ASSERT (ii * LONG 2 = LONG 20);
+      ASSERT (iii * LONG LONG 2 = LONG LONG 20);
+      ASSERT (ss * SHORT 2 = SHORT 20);
+      ASSERT (sss * SHORT SHORT 2 = SHORT SHORT 20)
+END
diff --git a/gcc/testsuite/algol68/execute/mult-string-1.a68 b/gcc/testsuite/algol68/execute/mult-string-1.a68
new file mode 100644 (file)
index 0000000..b0d4917
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "foo";
+      ASSERT (foo * -10 = "foo");
+      ASSERT (-10 * foo = "foo");
+      ASSERT (foo * 0 = "foo");
+      ASSERT (0 * foo = "foo");
+      ASSERT (foo * 1 = "foo");
+      ASSERT (1 * foo = "foo");
+      ASSERT (foo * 2 = "foofoo");
+      ASSERT (2 * foo = "foofoo");
+      ASSERT (foo * 3 = "foofoofoo");
+      ASSERT (3 * foo = "foofoofoo")
+END
diff --git a/gcc/testsuite/algol68/execute/mult-string-2.a68 b/gcc/testsuite/algol68/execute/mult-string-2.a68
new file mode 100644 (file)
index 0000000..670dcbf
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []CHAR foo = ("f","o","o");
+      ASSERT (foo * -10 = "foo");
+      ASSERT (-10 * foo = "foo");
+      ASSERT (foo * 0 = "foo");
+      ASSERT (0 * foo = "foo");
+      ASSERT (foo * 1 = "foo");
+      ASSERT (1 * foo = "foo");
+      ASSERT (foo * 2 = "foofoo");
+      ASSERT (2 * foo = "foofoo");
+      ASSERT (foo * 3 = "foofoofoo");
+      ASSERT (3 * foo = "foofoofoo")
+END
diff --git a/gcc/testsuite/algol68/execute/mult-string-3.a68 b/gcc/testsuite/algol68/execute/mult-string-3.a68
new file mode 100644 (file)
index 0000000..a8d3726
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN FLEX[3]CHAR foo := ("f","o","o");
+      ASSERT (foo * -10 = "foo");
+      ASSERT (-10 * foo = "foo");
+      ASSERT (foo * 0 = "foo");
+      ASSERT (0 * foo = "foo");
+      ASSERT (foo * 1 = "foo");
+      ASSERT (1 * foo = "foo");
+      ASSERT (foo * 2 = "foofoo");
+      ASSERT (2 * foo = "foofoo");
+      ASSERT (foo * 3 = "foofoofoo");
+      ASSERT (3 * foo = "foofoofoo")
+END
diff --git a/gcc/testsuite/algol68/execute/mult-string-4.a68 b/gcc/testsuite/algol68/execute/mult-string-4.a68
new file mode 100644 (file)
index 0000000..d5e1adb
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "abc";
+      ASSERT (foo[] * 2 = "abcabc")
+END
diff --git a/gcc/testsuite/algol68/execute/multab-1.a68 b/gcc/testsuite/algol68/execute/multab-1.a68
new file mode 100644 (file)
index 0000000..355129b
--- /dev/null
@@ -0,0 +1,31 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 2;
+      i *:= 2;
+      ASSERT (i = 4);
+      i *:= 2;
+      ASSERT (i = 8);
+
+      SHORT INT s := SHORT 2;
+      s *:= SHORT 2;
+      ASSERT (s = SHORT 4);
+      s *:= SHORT 3;
+      ASSERT (s = SHORT 12);
+
+      SHORT SHORT INT ss := SHORT SHORT 2;
+      ss *:= SHORT SHORT 2;
+      ASSERT (ss = SHORT SHORT 4);
+      ss *:= SHORT SHORT 3;
+      ASSERT (ss = SHORT SHORT 12);
+
+      REF LONG INT ii = HEAP LONG INT := LONG 2;
+      ii *:= LONG 2;
+      ASSERT (ii = LONG 4);
+      ii *:= LONG 2;
+      ASSERT (ii = LONG 8);
+
+      LONG LONG INT iii := LONG LONG 2;
+      iii *:= LONG LONG 2;
+      ASSERT (iii = LONG LONG 4);
+      iii *:= LONG LONG 2;
+      ASSERT (iii = LONG LONG 8)
+END
diff --git a/gcc/testsuite/algol68/execute/multab-2.a68 b/gcc/testsuite/algol68/execute/multab-2.a68
new file mode 100644 (file)
index 0000000..dc14859
--- /dev/null
@@ -0,0 +1,31 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 2;
+      i TIMESAB 2;
+      ASSERT (i = 4);
+      i TIMESAB 2;
+      ASSERT (i = 8);
+
+      REF SHORT INT ss = HEAP SHORT INT := SHORT 2;
+      ss TIMESAB SHORT 2;
+      ASSERT (ss = SHORT 4);
+      ss TIMESAB SHORT 2;
+      ASSERT (ss = SHORT 8);
+
+      SHORT SHORT INT sss := SHORT SHORT 2;
+      sss TIMESAB SHORT SHORT 2;
+      ASSERT (sss = SHORT SHORT 4);
+      sss TIMESAB SHORT SHORT 2;
+      ASSERT (sss = SHORT SHORT 8);
+      
+      REF LONG INT ii = HEAP LONG INT := LONG 2;
+      ii TIMESAB LONG 2;
+      ASSERT (ii = LONG 4);
+      ii TIMESAB LONG 2;
+      ASSERT (ii = LONG 8);
+
+      LONG LONG INT iii := LONG LONG 2;
+      iii TIMESAB LONG LONG 2;
+      ASSERT (iii = LONG LONG 4);
+      iii TIMESAB LONG LONG 2;
+      ASSERT (iii = LONG LONG 8)
+END
diff --git a/gcc/testsuite/algol68/execute/multab-3.a68 b/gcc/testsuite/algol68/execute/multab-3.a68
new file mode 100644 (file)
index 0000000..87d7f42
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT num ints := 10;
+      num ints *:= 2;
+      ASSERT (num ints = 20);
+      ASSERT ((LOC INT *:= 12) = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/mutual-recursion-1.a68 b/gcc/testsuite/algol68/execute/mutual-recursion-1.a68
new file mode 100644 (file)
index 0000000..06e01f9
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is even = (INT n) BOOL: (n = 0 | TRUE | is odd (n - 1));
+      PROC is odd = (INT n) BOOL: (n = 0 | FALSE | is even (n - 1));
+      ASSERT (is even (20));
+      ASSERT (is odd (13))
+END
diff --git a/gcc/testsuite/algol68/execute/ne-bits-1.a68 b/gcc/testsuite/algol68/execute/ne-bits-1.a68
new file mode 100644 (file)
index 0000000..49ef810
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BITS b, LONG BITS bb = LONG 16rff,  LONG LONG BITS bbb;
+      SHORT BITS ss = SHORT 16rff, SHORT SHORT BITS sss;
+      ASSERT (b /= 2r1);
+      ASSERT (bb NE LONG 8r477);
+      ASSERT (bbb /= LONG LONG 8r2);
+      ASSERT (ss NE SHORT 8r477);
+      ASSERT (sss /= SHORT SHORT 8r2)
+END
diff --git a/gcc/testsuite/algol68/execute/ne-char-char-1.a68 b/gcc/testsuite/algol68/execute/ne-char-char-1.a68
new file mode 100644 (file)
index 0000000..2a5b44f
--- /dev/null
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ("x" /= "a")
+END
diff --git a/gcc/testsuite/algol68/execute/ne-int-1.a68 b/gcc/testsuite/algol68/execute/ne-int-1.a68
new file mode 100644 (file)
index 0000000..2c26bd5
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 12;
+      LONG INT ii = LONG 12, LONG LONG INT iii = LONG LONG 12;
+      SHORT INT s = SHORT 12, SHORT SHORT INT ss = SHORT SHORT 12;
+      ASSERT (13 /= i);
+      ASSERT (ii NE LONG 13);
+      ASSERT (iii /= LONG LONG 13);
+      ASSERT (s /= SHORT 13);
+      ASSERT (ss /= SHORT SHORT 13)
+END
diff --git a/gcc/testsuite/algol68/execute/ne-string-1.a68 b/gcc/testsuite/algol68/execute/ne-string-1.a68
new file mode 100644 (file)
index 0000000..95bd212
--- /dev/null
@@ -0,0 +1,15 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "foo", bar = "bar", quux = "quux";
+      # /=  #
+      ASSERT (NOT ("" /= ""));
+      ASSERT (NOT ("foo" /= foo));
+      ASSERT (foo /= bar);
+      ASSERT (foo /= quux);
+      ASSERT (quux /= foo);
+      # NE  #
+      ASSERT (NOT ("" NE ""));
+      ASSERT (NOT ("foo" NE foo));
+      ASSERT (foo NE bar);
+      ASSERT (foo NE quux);
+      ASSERT (quux NE foo)
+END
diff --git a/gcc/testsuite/algol68/execute/neg-int-1.a68 b/gcc/testsuite/algol68/execute/neg-int-1.a68
new file mode 100644 (file)
index 0000000..0e66149
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (-i = -10);
+      ASSERT (-ii  = - LONG 10);
+      ASSERT (-iii = - LONG LONG 10);
+      ASSERT (-ss  = - SHORT 10);
+      ASSERT (-sss = - SHORT SHORT 10)
+END
diff --git a/gcc/testsuite/algol68/execute/not-bits-1.a68 b/gcc/testsuite/algol68/execute/not-bits-1.a68
new file mode 100644 (file)
index 0000000..8334f7f
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+# NOT for SIZETY BITS.  #
+BEGIN BITS b = 16rf0f0;
+      ASSERT ((NOT b AND 16rffff) = 16r0f0f);
+      LONG BITS bb = LONG 16rf0f0;
+      ASSERT ((NOT bb AND LONG 16rffff) = LONG 16r0f0f);
+      LONG LONG BITS bbb = LONG LONG 16rf0f0;
+      ASSERT ((NOT bbb AND LONG LONG 16rffff) = LONG LONG 16r0f0f);
+      SHORT BITS ss = SHORT 16rf0f0;
+      ASSERT ((NOT ss AND SHORT 16rffff) = SHORT 16r0f0f);
+      SHORT SHORT BITS sss = SHORT SHORT 16rf0f0;
+      ASSERT ((NOT sss AND SHORT SHORT 16rffff) = SHORT SHORT 16r0f0f)
+END
diff --git a/gcc/testsuite/algol68/execute/odd-1.a68 b/gcc/testsuite/algol68/execute/odd-1.a68
new file mode 100644 (file)
index 0000000..893bf04
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT a = 1;
+      ASSERT (ODD a);
+      ASSERT (ODD LONG 3);
+      ASSERT (NOT ODD LONG LONG 4);
+      ASSERT (ODD SHORT 3);
+      ASSERT (NOT ODD SHORT SHORT 4)
+END
diff --git a/gcc/testsuite/algol68/execute/op-1.a68 b/gcc/testsuite/algol68/execute/op-1.a68
new file mode 100644 (file)
index 0000000..3b63c32
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN OP ONEOVER = (REAL a) REAL: 1/a;
+      REAL x;
+      x := ONEOVER 3.14
+END
diff --git a/gcc/testsuite/algol68/execute/op-2.a68 b/gcc/testsuite/algol68/execute/op-2.a68
new file mode 100644 (file)
index 0000000..c772171
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN OP + = (INT a, b) INT: a - -b;
+      ASSERT (10 + 30 = 40)
+END
diff --git a/gcc/testsuite/algol68/execute/op-3.a68 b/gcc/testsuite/algol68/execute/op-3.a68
new file mode 100644 (file)
index 0000000..9889a64
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN OP MIN = (REAL a, b) REAL: (a < b | a | b),
+         MIN = (INT a, REAL b) REAL: (a < b | a | b),
+         MIN = (REAL a, INT b) REAL: a MIN REAL (b);
+      PRIO MIN = 6;
+      ASSERT (10.0 MIN 20.0 > 9.9 AND 10.0 MIN 20.0 < 10.1);
+      ASSERT (10.0 MIN 100 > 9.9 AND 10.0 MIN 100 < 10.1);
+      ASSERT (100.0 MIN 10 > 9.9 AND 100.0 MIN 10 < 10.1)
+END
diff --git a/gcc/testsuite/algol68/execute/operator-declaration-1.a68 b/gcc/testsuite/algol68/execute/operator-declaration-1.a68
new file mode 100644 (file)
index 0000000..61f8fa9
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n = 10;
+      # Note that the priority for the monadic operators gets ignored.  #
+      PRIO JORL = 6, JURL = 6, XXX = 6, YYY = 6;
+      OP(INT)INT JORL = (n > 10 | (INT a) INT: a + 1 | (INT a) INT: a - 1),
+                 JURL = (n <= 10 | (INT a) INT: a + 1 | (INT a) INT: a - 1);
+      OP(INT,INT)INT XXX = (INT a, b) INT: a + b,
+                     YYY = (n > 10 | (INT a,b) INT: a * b | (INT a,b) INT: a - b);
+      ASSERT (JORL 10 = 9);
+      ASSERT (JURL 10 = 11);
+      ASSERT (2 XXX 3 = 5);
+      ASSERT (2 YYY 3 = -1);
+END
diff --git a/gcc/testsuite/algol68/execute/or-bits-1.a68 b/gcc/testsuite/algol68/execute/or-bits-1.a68
new file mode 100644 (file)
index 0000000..4fc1b06
--- /dev/null
@@ -0,0 +1,18 @@
+# { dg-options "-fstropping=upper" }  #
+# OR for SIZETY BITS.  #
+BEGIN BITS b = 16rf0f0;
+      ASSERT ((b OR 16r0f0f) = 16rffff);
+      ASSERT ((b OR 16r00ff) = 16rf0ff);
+      LONG BITS bb = LONG 16rf0f0;
+      ASSERT ((bb OR LONG 16r0f0f) = LONG 16rffff);
+      ASSERT ((bb OR LONG 16r00ff) = LONG 16rf0ff);
+      LONG LONG BITS bbb = LONG LONG 16rf0f0;
+      ASSERT ((bbb OR LONG LONG 16r0f0f) = LONG LONG 16rffff);
+      ASSERT ((bbb OR LONG LONG 16r00ff) = LONG LONG 16rf0ff);
+      SHORT BITS ss = SHORT 16rf0f0;
+      ASSERT ((ss OR SHORT 16r0f0f) = SHORT 16rffff);
+      ASSERT ((ss OR SHORT 16r00ff) = SHORT 16rf0ff);
+      SHORT SHORT BITS sss = SHORT SHORT 16rf0f0;
+      ASSERT ((sss OR SHORT SHORT 16r0f0f) = SHORT SHORT 16rffff);
+      ASSERT ((sss OR SHORT SHORT 16r00ff) = SHORT SHORT 16rf0ff)
+END
diff --git a/gcc/testsuite/algol68/execute/orf-1.a68 b/gcc/testsuite/algol68/execute/orf-1.a68
new file mode 100644 (file)
index 0000000..10f0521
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      ASSERT (i = 0 OREL i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/over-int-1.a68 b/gcc/testsuite/algol68/execute/over-int-1.a68
new file mode 100644 (file)
index 0000000..871effb
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (i % 2 = 5);
+      ASSERT (ii % LONG 2 = LONG 5);
+      ASSERT (iii % LONG LONG 2 = LONG LONG 5);
+      ASSERT (ss % SHORT 2 = SHORT 5);
+      ASSERT (sss % SHORT SHORT 2 = SHORT SHORT 5)
+END
diff --git a/gcc/testsuite/algol68/execute/overab-1.a68 b/gcc/testsuite/algol68/execute/overab-1.a68
new file mode 100644 (file)
index 0000000..8edfa1e
--- /dev/null
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN (INT i := 11; i OVERAB 2; ASSERT (i = 5));
+      (INT i := 11; i %:= 2; ASSERT (i = 5));
+      (SHORT INT i := SHORT 11; i OVERAB SHORT 2; ASSERT (i = SHORT 5));
+      (SHORT INT i := SHORT 11; i %:= SHORT 2; ASSERT (i = SHORT 5));
+      (SHORT SHORT INT i := SHORT SHORT 11; i OVERAB SHORT SHORT 2; ASSERT (i = SHORT SHORT 5));
+      (SHORT SHORT INT i := SHORT SHORT 11; i %:= SHORT SHORT 2; ASSERT (i = SHORT SHORT 5));
+      (LONG INT i := LONG 11; i OVERAB LONG 2; ASSERT (i = LONG 5));
+      (LONG INT i := LONG 11; i %:= LONG 2; ASSERT (i = LONG 5));
+      (LONG LONG INT i := LONG LONG 11; i OVERAB LONG LONG 2; ASSERT (i = LONG LONG 5));
+      (LONG LONG INT i := LONG LONG 11; i %:= LONG LONG 2; ASSERT (i = LONG LONG 5))
+END
diff --git a/gcc/testsuite/algol68/execute/overab-2.a68 b/gcc/testsuite/algol68/execute/overab-2.a68
new file mode 100644 (file)
index 0000000..eec8a1c
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 10;
+      (((n OVERAB 1))) := 5;
+      ASSERT (n = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/particular-program-1.a68 b/gcc/testsuite/algol68/execute/particular-program-1.a68
new file mode 100644 (file)
index 0000000..2c490af
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+# Particular program with preceding labels.  #
+jo: ju:
+BEGIN SKIP END
diff --git a/gcc/testsuite/algol68/execute/plus-char-1.a68 b/gcc/testsuite/algol68/execute/plus-char-1.a68
new file mode 100644 (file)
index 0000000..d017fe0
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ("a" + "b" = "ab");
+      ASSERT ("" + "x" = "x")
+END
diff --git a/gcc/testsuite/algol68/execute/plus-int-1.a68 b/gcc/testsuite/algol68/execute/plus-int-1.a68
new file mode 100644 (file)
index 0000000..93ea004
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      SHORT INT ss = SHORT 10, SHORT SHORT INT sss = SHORT SHORT 10;
+      ASSERT (i + 2 = 12);
+      ASSERT (ii + LONG 2 = LONG 12);
+      ASSERT (iii + LONG LONG 2 = LONG LONG 12);
+      ASSERT (ss + SHORT 2 = SHORT 12);
+      ASSERT (sss + SHORT SHORT 2 = SHORT SHORT 12)
+END
diff --git a/gcc/testsuite/algol68/execute/plus-string-1.a68 b/gcc/testsuite/algol68/execute/plus-string-1.a68
new file mode 100644 (file)
index 0000000..be9edf7
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "foo", bar = "bar", quux = "quux";
+      ASSERT ("" + "" = "");
+      ASSERT ("" + foo = "foo");
+      ASSERT (bar + "" = "bar");
+      ASSERT (foo + bar = "foobar");
+      STRING res = foo + bar;
+      ASSERT (LWB res = 1 AND UPB res = 6);
+      STRING empty = "" + "";
+      ASSERT (LWB empty = 1 AND UPB empty = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/plus-string-2.a68 b/gcc/testsuite/algol68/execute/plus-string-2.a68
new file mode 100644 (file)
index 0000000..6399ee1
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC rec parse comment = VOID:
+      BEGIN STRING content;
+            done;
+            100;
+      done:
+            ASSERT (content + "x" = "x")
+      END;
+
+      rec parse comment
+END
diff --git a/gcc/testsuite/algol68/execute/plus-string-stride-1.a68 b/gcc/testsuite/algol68/execute/plus-string-stride-1.a68
new file mode 100644 (file)
index 0000000..07fdf79
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1","H","3"),
+                        ("4","O","6"),
+                        ("7","M","9"),
+                        ("8","E","2"));
+      ASSERT (matrix[1:2,1] + matrix[3:4,3] = "1492")
+END
diff --git a/gcc/testsuite/algol68/execute/plusab-1.a68 b/gcc/testsuite/algol68/execute/plusab-1.a68
new file mode 100644 (file)
index 0000000..8de4e97
--- /dev/null
@@ -0,0 +1,34 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN INT i := 10;
+            i +:= 2;
+            ASSERT (i = 12);
+            i PLUSAB 2;
+            ASSERT (i = 14)
+      END;
+
+      BEGIN SHORT INT i := SHORT 1000;
+            i +:= SHORT 100;
+            ASSERT (i = SHORT 1100);
+            i PLUSAB SHORT 100;
+            ASSERT (i = SHORT 1200)
+      END;
+      BEGIN SHORT SHORT INT i := SHORT SHORT 10000;
+            i +:= SHORT SHORT 1000;
+            ASSERT (i = SHORT SHORT 11000);
+            i PLUSAB SHORT SHORT 1000;
+            ASSERT (i = SHORT SHORT 12000)
+      END;
+
+      BEGIN LONG INT i := LONG 1000;
+            i +:= LONG 100;
+            ASSERT (i = LONG 1100);
+            i PLUSAB LONG 100;
+            ASSERT (i = LONG 1200)
+      END;
+      BEGIN LONG LONG INT i := LONG LONG 10000;
+            i +:= LONG LONG 1000;
+            ASSERT (i = LONG LONG 11000);
+            i PLUSAB LONG LONG 1000;
+            ASSERT (i = LONG LONG 12000)
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/plusab-2.a68 b/gcc/testsuite/algol68/execute/plusab-2.a68
new file mode 100644 (file)
index 0000000..6db4686
--- /dev/null
@@ -0,0 +1,20 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN REAL i := 10.0;
+            i +:= 2.0;
+            ASSERT (i > 11.9);
+            i PLUSAB 2.0;
+            ASSERT (i > 13.9)
+      END;
+      BEGIN LONG REAL i := LONG 1000.0;
+            i +:= LONG 100.0;
+            ASSERT (i > LONG 1099.9);
+            i PLUSAB LONG 100.0;
+            ASSERT (i > LONG 1199.9)
+      END;
+      BEGIN LONG LONG REAL i := LONG LONG 10000.0;
+            i +:= LONG LONG 1000.0;
+            ASSERT (i > LONG LONG 10999.9);
+            i PLUSAB LONG LONG 1000.0;
+            ASSERT (i > LONG LONG 11999.9)
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/plusab-3.a68 b/gcc/testsuite/algol68/execute/plusab-3.a68
new file mode 100644 (file)
index 0000000..beb6306
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 0;
+      (((n +:= 1))) := 5;
+      ASSERT (n = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/plusab-4.a68 b/gcc/testsuite/algol68/execute/plusab-4.a68
new file mode 100644 (file)
index 0000000..adfbc9f
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT num ints := 0;
+      num ints +:= 1;
+      ASSERT (num ints = 1);
+      ASSERT ((LOC INT +:= 12) = 12)
+END
diff --git a/gcc/testsuite/algol68/execute/plusab-string-1.a68 b/gcc/testsuite/algol68/execute/plusab-string-1.a68
new file mode 100644 (file)
index 0000000..ec1bd3c
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo := "";
+      foo +:= "foo";
+      ASSERT (LWB foo = 1 AND UPB foo = 3 AND foo = "foo");
+      foo PLUSAB "bar";
+      ASSERT (LWB foo = 1 AND UPB foo = 6 AND foo = "foobar")
+END
diff --git a/gcc/testsuite/algol68/execute/plusto-char-1.a68 b/gcc/testsuite/algol68/execute/plusto-char-1.a68
new file mode 100644 (file)
index 0000000..79881c0
--- /dev/null
@@ -0,0 +1,7 @@
+begin string foo := "foo";
+      char c := "x";
+      c PLUSTO foo;
+      assert (foo = "xfoo");
+      c +=: foo;
+      assert (foo = "xxfoo")
+end
diff --git a/gcc/testsuite/algol68/execute/plusto-string-1.a68 b/gcc/testsuite/algol68/execute/plusto-string-1.a68
new file mode 100644 (file)
index 0000000..7d5894b
--- /dev/null
@@ -0,0 +1,6 @@
+begin string foo := "foo";
+      "bar" PLUSTO foo;
+      assert (foo = "barfoo");
+      "quux" +=: foo;
+      assert (foo = "quuxbarfoo")
+end
diff --git a/gcc/testsuite/algol68/execute/posix-argc-argv-1.a68 b/gcc/testsuite/algol68/execute/posix-argc-argv-1.a68
new file mode 100644 (file)
index 0000000..a638038
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (argc >= 1);
+      ASSERT (argv (1000) = "");
+      ASSERT (argv (-1) = "");
+      FOR i TO argc
+      DO puts (argv (i)) OD
+END
diff --git a/gcc/testsuite/algol68/execute/posix-fopen-1.a68 b/gcc/testsuite/algol68/execute/posix-fopen-1.a68
new file mode 100644 (file)
index 0000000..d2a0c40
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT fd = fopen ("doesn''t exist", file o default);
+      ASSERT (fd = -1)
+END
diff --git a/gcc/testsuite/algol68/execute/posix-fputc-fputs-1.a68 b/gcc/testsuite/algol68/execute/posix-fputc-fputs-1.a68
new file mode 100644 (file)
index 0000000..bf0af6e
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN fputc (stdout, "X");
+      ASSERT (fputs (stdout, "foo") = 3);
+      fputs (stdout, fputc (stdout, "Y") + "T");
+      fputc (stdout, "Z");
+      ASSERT (fputs (stdout, "") = 0);
+      puts ("")
+END
diff --git a/gcc/testsuite/algol68/execute/posix-getenv-1.a68 b/gcc/testsuite/algol68/execute/posix-getenv-1.a68
new file mode 100644 (file)
index 0000000..d1e6905
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (getenv ("") = "");
+      ASSERT (getenv ("DOESNT EXIST FOR SURE") = "")
+END
diff --git a/gcc/testsuite/algol68/execute/posix-lseek.a68 b/gcc/testsuite/algol68/execute/posix-lseek.a68
new file mode 100644 (file)
index 0000000..8f20dc5
--- /dev/null
@@ -0,0 +1,17 @@
+begin int fd = fopen ("../../ga68", file_o_rdonly);
+      assert (fd /= -1);
+      assert (errno = 0);
+      long long int offset;
+      offset := lseek (fd, long long 0, seek_cur);
+      assert (offset = long long 0);
+      assert (errno = 0);
+      offset := lseek (fd, long long 0, seek_set);
+      assert (offset = long long 0);
+      assert (errno = 0);
+      offset := lseek (fd, long long 0, seek_end);
+      long long int offset2 = lseek (fd, offset, seek_set);
+      assert (offset = offset2);
+      long long int file_size = fsize (fd);
+      assert (errno = 0);
+      assert (offset = file_size)
+end
diff --git a/gcc/testsuite/algol68/execute/posix-perror-1.a68 b/gcc/testsuite/algol68/execute/posix-perror-1.a68
new file mode 100644 (file)
index 0000000..a349dd7
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# { dg-output "^something unique: " }  #
+BEGIN INT fd = fopen ("doesn''t exist", file o default);
+      IF fd = -1 THEN
+         ASSERT (strerror (errno) /= "");
+         perror ("something unique")
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/posix-putchar-1.a68 b/gcc/testsuite/algol68/execute/posix-putchar-1.a68
new file mode 100644 (file)
index 0000000..01bfbbd
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN putchar ("X");
+      putchar ("Y");
+      putchar ("Z");
+      puts ("\n")
+END
diff --git a/gcc/testsuite/algol68/execute/posix-stdinouterr-1.a68 b/gcc/testsuite/algol68/execute/posix-stdinouterr-1.a68
new file mode 100644 (file)
index 0000000..dc5b373
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (stdin = 0);
+      ASSERT (stdout = 1);
+      ASSERT (stderr = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/posix-strerror-1.a68 b/gcc/testsuite/algol68/execute/posix-strerror-1.a68
new file mode 100644 (file)
index 0000000..607e40d
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT fd = fopen ("doesn''t exist", file o default);
+      IF fd = -1 THEN ASSERT (strerror (errno) /= "") FI
+END
diff --git a/gcc/testsuite/algol68/execute/posix-stride-1.a68 b/gcc/testsuite/algol68/execute/posix-stride-1.a68
new file mode 100644 (file)
index 0000000..6e7a79d
--- /dev/null
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1","H","3"),
+                        ("4","O","6"),
+                        ("7","M","9"),
+                        ("8","E","0"));
+      []CHAR column = matrix[1:4,2];
+      puts (column);
+      fputs (stdout, matrix[3,2:3]);
+      puts ("\n");
+      fputs (stdout, matrix[1:3,1]);
+      puts ("\n");
+      puts (getenv (matrix[,2]));
+      perror (matrix[,3])
+END
diff --git a/gcc/testsuite/algol68/execute/pow-int-1.a68 b/gcc/testsuite/algol68/execute/pow-int-1.a68
new file mode 100644 (file)
index 0000000..7d929d7
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 2;
+      LONG INT ii = LONG 2, LONG LONG INT iii = LONG LONG 2;
+      SHORT INT ss = SHORT 2, SHORT SHORT INT sss = SHORT SHORT 2;
+      ASSERT (i ** 2 = 4);
+      ASSERT (ii ** 2 = LONG 4);
+      ASSERT (iii ** 2 = LONG LONG 4);
+      ASSERT (ss ** 2 = SHORT 4);
+      ASSERT (sss ** 2 = SHORT SHORT 4)
+END
diff --git a/gcc/testsuite/algol68/execute/pow-real-1.a68 b/gcc/testsuite/algol68/execute/pow-real-1.a68
new file mode 100644 (file)
index 0000000..8102870
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r0 = 2.0; LONG REAL rr0 = LONG 2.0; LONG LONG REAL rrr0 = LONG LONG 2.0;
+      REAL r1 = r0 ^ 2; REAL r2 = r0 ^ 3.0;
+      LONG REAL rr1 = rr0 ^ LONG 2; LONG REAL rr2 = rr0 ^ LONG 3.0;
+      LONG LONG REAL rrr1 = rrr0 ^ LONG LONG 2; LONG LONG REAL rrr2 = rrr0 ^ LONG LONG 3.0;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/proc-1.a68 b/gcc/testsuite/algol68/execute/proc-1.a68
new file mode 100644 (file)
index 0000000..3085f4b
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = INT: 100;
+      ASSERT (foo = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-10.a68 b/gcc/testsuite/algol68/execute/proc-10.a68
new file mode 100644 (file)
index 0000000..bcc86d8
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC(INT,INT)INT foo = (INT i, j) INT: i + j;
+      ASSERT (foo (10, 20) = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-12.a68 b/gcc/testsuite/algol68/execute/proc-12.a68
new file mode 100644 (file)
index 0000000..be75e79
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC(INT)INT foo = baz;
+      PROC bar = (INT i) INT: i + 1;
+      PROC baz = (INT i) INT: i - 1;
+      ASSERT (foo (10) = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-13.a68 b/gcc/testsuite/algol68/execute/proc-13.a68
new file mode 100644 (file)
index 0000000..c23c086
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is even := (INT n) BOOL: n %* 2 = 0;
+      ASSERT (is even (40));
+      PROC no args := BOOL: TRUE;
+      ASSERT (no args)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-14.a68 b/gcc/testsuite/algol68/execute/proc-14.a68
new file mode 100644 (file)
index 0000000..b653bbe
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is even := (INT n) BOOL: n %* 2 = 0;
+      PROC is odd := (INT n) BOOL: n %* 2 /= 0;
+      PROC(INT)BOOL f = is even;
+      PROC(INT)BOOL g = is odd;
+      ASSERT (f (40));
+      ASSERT (g (3))
+END
diff --git a/gcc/testsuite/algol68/execute/proc-15.a68 b/gcc/testsuite/algol68/execute/proc-15.a68
new file mode 100644 (file)
index 0000000..63c5a55
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Nested procedures.  #
+BEGIN PROC foo = (INT i) INT:
+      BEGIN PROC bar = (INT i) INT: i - 1;
+            bar (i) * 10
+      END;
+      ASSERT (foo (10) = 90)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-16.a68 b/gcc/testsuite/algol68/execute/proc-16.a68
new file mode 100644 (file)
index 0000000..bb1b1e2
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC bar = (INT i) INT: i - 1;
+      PROC foo = (INT i) INT:
+      BEGIN
+            bar (i) * 10
+      END;
+      ASSERT (foo (10) = 90)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-17.a68 b/gcc/testsuite/algol68/execute/proc-17.a68
new file mode 100644 (file)
index 0000000..24ac5a8
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+# Identity declarations and procedures.  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      ASSERT (foo (10) = 11);
+      PROC(INT)INT bar = (INT i) INT: i + 1;
+      ASSERT (bar (10) = 11);
+      PROC(INT)INT baz = foo;
+      ASSERT (baz (10) = 11);
+      PROC(INT)INT quux = IF 10 > 1 THEN baz ELSE foo FI;
+      ASSERT (quux (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-18.a68 b/gcc/testsuite/algol68/execute/proc-18.a68
new file mode 100644 (file)
index 0000000..3456882
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      PROC(INT)INT bar;
+      bar := foo;
+      ASSERT (bar (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-19.a68 b/gcc/testsuite/algol68/execute/proc-19.a68
new file mode 100644 (file)
index 0000000..0846fdc
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      PROC(INT)INT bar := foo;
+      ASSERT (bar (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-2.a68 b/gcc/testsuite/algol68/execute/proc-2.a68
new file mode 100644 (file)
index 0000000..39346fe
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Call a non-variable procedure before declaration.  #
+BEGIN ASSERT (foo = 100);
+      PROC foo = INT: 100;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/proc-20.a68 b/gcc/testsuite/algol68/execute/proc-20.a68
new file mode 100644 (file)
index 0000000..3bf66ee
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo := (INT i) INT: i + 1;
+      PROC(INT)INT bar := foo;
+      ASSERT (bar (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-21.a68 b/gcc/testsuite/algol68/execute/proc-21.a68
new file mode 100644 (file)
index 0000000..c1ac980
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# REF REF PROC  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      PROC(INT)INT bar := foo;
+      REF PROC(INT)INT baz;
+      baz := bar;
+      ASSERT (baz (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-22.a68 b/gcc/testsuite/algol68/execute/proc-22.a68
new file mode 100644 (file)
index 0000000..fa23d53
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# REF REF PROC  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      PROC(INT)INT bar := foo;
+      REF PROC(INT)INT baz := bar;
+      ASSERT (baz (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-23.a68 b/gcc/testsuite/algol68/execute/proc-23.a68
new file mode 100644 (file)
index 0000000..7fa1257
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC increment = (INT a) INT: a + 1;
+      PROC getproc = PROC(INT)INT:
+      BEGIN increment
+      END;
+      # getproc below gets deprocedured to yield increment.  #
+      ASSERT (getproc (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-25.a68 b/gcc/testsuite/algol68/execute/proc-25.a68
new file mode 100644 (file)
index 0000000..5b46e89
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC increment := (INT a) INT: a + 1;
+      PROC getproc := PROC(INT)INT:
+      BEGIN increment
+      END;
+      # getproc below gets deprocedured to yield increment.  #
+      ASSERT (getproc (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-26.a68 b/gcc/testsuite/algol68/execute/proc-26.a68
new file mode 100644 (file)
index 0000000..833cbb3
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC sum = (INT a, b) INT: a + b,
+           minus = (INT a, b) INT: a - b;
+      ASSERT (sum (1, 2) = 3);
+      ASSERT (minus (1, 2) = -1)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-27.a68 b/gcc/testsuite/algol68/execute/proc-27.a68
new file mode 100644 (file)
index 0000000..49c4c6a
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC reciprocal = (REAL a) REAL: 1/a;
+      REAL x;
+      x := reciprocal (3.14)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-28.a68 b/gcc/testsuite/algol68/execute/proc-28.a68
new file mode 100644 (file)
index 0000000..d909219
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC hcf = (INT m, n) INT:
+         IF m < n
+         THEN hcf (n, m)
+         ELIF n = 0
+         THEN m
+         ELSE hcf (n, m MOD n)
+         FI;
+      ASSERT (hcf (10, 20) = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-29.a68 b/gcc/testsuite/algol68/execute/proc-29.a68
new file mode 100644 (file)
index 0000000..51ea5fc
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# A heap proc variable.  #
+BEGIN HEAP PROC foo := INT: 666;
+      ASSERT (foo = 666)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-3.a68 b/gcc/testsuite/algol68/execute/proc-3.a68
new file mode 100644 (file)
index 0000000..bd9ce05
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = (INT i, j) INT: i + j + 1;
+      ASSERT (foo (10, 11) = 22)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-4.a68 b/gcc/testsuite/algol68/execute/proc-4.a68
new file mode 100644 (file)
index 0000000..bce68cf
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (foo (10, 11) = 22);
+      PROC foo = (INT i, j) INT: i + j + 1;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/proc-5.a68 b/gcc/testsuite/algol68/execute/proc-5.a68
new file mode 100644 (file)
index 0000000..1893dc3
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Recursive function.  #
+BEGIN PROC foo = (INT i) INT: (i > 0 | i + foo (i - 1) | 0);
+      ASSERT (foo (10) = 55)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-6.a68 b/gcc/testsuite/algol68/execute/proc-6.a68
new file mode 100644 (file)
index 0000000..894f53e
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Recursive function, used before declared.  #
+BEGIN ASSERT (foo (10) = 55);
+      PROC foo = (INT i) INT: BEGIN (i > 0 | i + foo (i - 1) | 0) END;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/proc-7.a68 b/gcc/testsuite/algol68/execute/proc-7.a68
new file mode 100644 (file)
index 0000000..9f39e2d
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = (INT i) INT: i + 1;
+      PROC(INT)INT bar = foo;
+      ASSERT (bar (10) = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/proc-8.a68 b/gcc/testsuite/algol68/execute/proc-8.a68
new file mode 100644 (file)
index 0000000..ee548c6
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC INT foo = INT: 100;
+      ASSERT (foo = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/procedured-goto-1.a68 b/gcc/testsuite/algol68/execute/procedured-goto-1.a68
new file mode 100644 (file)
index 0000000..8d3dc21
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 4;
+beg:  WHILE i > 0
+      DO []PROC VOID table = (l3,l1,l2,end);
+         table[i];
+l1:      puts ("uno\n"); i -:= 1; beg;
+l2:      puts ("dos\n"); i -:= 1; beg;
+l3:      puts ("tres\n"); i -:= 1; beg;
+end:     puts ("cuatro\n"); i -:= 1; beg
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/quine.a68 b/gcc/testsuite/algol68/execute/quine.a68
new file mode 100644 (file)
index 0000000..9fd9e42
--- /dev/null
@@ -0,0 +1,2 @@
+# { dg-options "-fstropping=upper" }  #
+(STRING a="(STRING a="";puts(2*a[:19]+2*a[19:]);0)";puts(2*a[:19]+2*a[19:]))
diff --git a/gcc/testsuite/algol68/execute/random-1.a68 b/gcc/testsuite/algol68/execute/random-1.a68
new file mode 100644 (file)
index 0000000..82cc6e3
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN IF random > 0.5 THEN puts ("yes\n") ELSE puts ("no\n") FI;
+      LONG REAL rr = long random;
+      IF rr > LONG 0.5 THEN puts ("long yes\n") ELSE puts ("long no\n") FI;
+      LONG LONG REAL rrr = long long random;
+      IF rrr > LONG LONG 0.5 THEN puts ("long long yes\n") ELSE puts ("long long no\n") FI
+END
diff --git a/gcc/testsuite/algol68/execute/re-im-1.a68 b/gcc/testsuite/algol68/execute/re-im-1.a68
new file mode 100644 (file)
index 0000000..7801b76
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN COMPL z = 4.0I5.0;
+      ASSERT (RE z = 4.0 AND IM z = 5.0);
+      LONG COMPL zz = LONG 4.0 I LONG 6.0;
+      ASSERT (RE zz = LONG 4.0 AND IM zz = LONG 6.0);
+      LONG LONG COMPL zzz = LONG LONG 4.0 I LONG LONG 7.0;
+      ASSERT (RE zzz = LONG LONG 4.0 AND IM zzz = LONG LONG 7.0)
+END
diff --git a/gcc/testsuite/algol68/execute/rela-string-1.a68 b/gcc/testsuite/algol68/execute/rela-string-1.a68
new file mode 100644 (file)
index 0000000..9264857
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ("" >= "");
+      ASSERT ("" <= "");
+      ASSERT ("zzz" > "aaa");
+      ASSERT ("zzz" >= "aaa");
+      ASSERT ("HelloA" < "HelloB")
+END
diff --git a/gcc/testsuite/algol68/execute/repr-1.a68 b/gcc/testsuite/algol68/execute/repr-1.a68
new file mode 100644 (file)
index 0000000..2b92a3e
--- /dev/null
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (REPR ABS "x" = "x")
+END
diff --git a/gcc/testsuite/algol68/execute/round-1.a68 b/gcc/testsuite/algol68/execute/round-1.a68
new file mode 100644 (file)
index 0000000..632e382
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL x = 3.14, y = 3.80;
+      LONG REAL xx = LONG 3.14, yy = LONG 3.80;
+      LONG LONG REAL xxx = LONG LONG 3.14, yyy = LONG LONG 3.80;
+      ASSERT (ROUND x = 3 AND ROUND y = 4);
+      ASSERT (ROUND xx = LONG 3 AND ROUND yy = LONG 4);
+      ASSERT (ROUND xxx = LONG LONG 3 AND ROUND yyy = LONG LONG 4)
+END
diff --git a/gcc/testsuite/algol68/execute/row-display-1.a68 b/gcc/testsuite/algol68/execute/row-display-1.a68
new file mode 100644 (file)
index 0000000..82540d7
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT foo = (7,8,9);
+      [,]INT bar = ((1,2,3),(4,5,6),foo);
+      ASSERT (bar[1,1] = 1);
+      ASSERT (bar[1,2] = 2);
+      ASSERT (bar[1,3] = 3);
+      ASSERT (bar[2,1] = 4);
+      ASSERT (bar[2,2] = 5);
+      ASSERT (bar[2,3] = 6);
+      ASSERT (bar[3,1] = 7);
+      ASSERT (bar[3,2] = 8);
+      ASSERT (bar[3,3] = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/row-display-2.a68 b/gcc/testsuite/algol68/execute/row-display-2.a68
new file mode 100644 (file)
index 0000000..f8a07a4
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT foo = (7,8,9);
+      [3,3]INT bar := ((1,2,3),(4,5,6),foo);
+      ASSERT (bar[1,1] = 1);
+      ASSERT (bar[1,2] = 2);
+      ASSERT (bar[1,3] = 3);
+      ASSERT (bar[2,1] = 4);
+      ASSERT (bar[2,2] = 5);
+      ASSERT (bar[2,3] = 6);
+      ASSERT (bar[3,1] = 7);
+      ASSERT (bar[3,2] = 8);
+      ASSERT (bar[3,3] = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/row-display-3.a68 b/gcc/testsuite/algol68/execute/row-display-3.a68
new file mode 100644 (file)
index 0000000..73f3ff8
--- /dev/null
@@ -0,0 +1,15 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE FOO = STRUCT (INT i, STRING s);
+      [,]FOO matrix = (((10, "foo"), (20, "bar"), (30, "baz")),
+                       ((40, "uno"), (50, "dos"), (60, "tres")),
+                       ((70, "cuatro"), (80, "cinco"), (90, "seis")));
+      ASSERT (i OF matrix[1,1] = 10);
+      ASSERT (i OF matrix[1,2] = 20);
+      ASSERT (i OF matrix[1,3] = 30);
+      ASSERT (i OF matrix[2,1] = 40);
+      ASSERT (i OF matrix[2,2] = 50);
+      ASSERT (i OF matrix[2,3] = 60);
+      ASSERT (i OF matrix[3,1] = 70);
+      ASSERT (i OF matrix[3,2] = 80);
+      ASSERT (i OF matrix[3,3] = 90)
+END
diff --git a/gcc/testsuite/algol68/execute/row-display-4.a68 b/gcc/testsuite/algol68/execute/row-display-4.a68
new file mode 100644 (file)
index 0000000..464d6fb
--- /dev/null
@@ -0,0 +1,16 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,][]INT duples = (((1,2), (3,4), (5,6)),
+                         ((7,8), (9,10), (11,12)));
+      ASSERT (duples[1,1][1] = 1);
+      ASSERT (duples[1,1][2] = 2);
+      ASSERT (duples[1,2][1] = 3);
+      ASSERT (duples[1,2][2] = 4);
+      ASSERT (duples[1,3][1] = 5);
+      ASSERT (duples[1,3][2] = 6);
+      ASSERT (duples[2,1][1] = 7);
+      ASSERT (duples[2,1][2] = 8);
+      ASSERT (duples[2,2][1] = 9);
+      ASSERT (duples[2,2][2] = 10);
+      ASSERT (duples[2,3][1] = 11);
+      ASSERT (duples[2,3][2] = 12)
+END
diff --git a/gcc/testsuite/algol68/execute/row-display-5.a68 b/gcc/testsuite/algol68/execute/row-display-5.a68
new file mode 100644 (file)
index 0000000..9d6b34b
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT list1 = (1,2,3),
+            list2 = (4,5,6),
+            list3 = (7,8,9);
+      [,]INT matrix = (list1, list2, list3);
+      [,,]INT cube = (matrix, matrix, matrix);
+      ASSERT (cube[1,1,1] = 1);
+      ASSERT (cube[2,2,2] = 5);
+      ASSERT (cube[3,3,3] = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-1.a68 b/gcc/testsuite/algol68/execute/rowing-1.a68
new file mode 100644 (file)
index 0000000..792b7af
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT a = 10;
+      ASSERT (LWB a = 1 AND UPB a = 1 AND ELEMS a = 1);
+      ASSERT (a[1] = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-10.a68 b/gcc/testsuite/algol68/execute/rowing-10.a68
new file mode 100644 (file)
index 0000000..8ae0caa
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      REF[,]INT a = i;
+      ASSERT (1 LWB a = 1 AND 1 UPB a = 1 AND 1 ELEMS a = 1);
+      ASSERT (2 LWB a = 1 AND 2 UPB a = 1 AND 2 ELEMS a = 1);
+      a[1,1] := a[1,1] + 1;
+      ASSERT (a[1,1] = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-11.a68 b/gcc/testsuite/algol68/execute/rowing-11.a68
new file mode 100644 (file)
index 0000000..c34342c
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      REF[,,]INT a = i;
+      ASSERT (1 LWB a = 1 AND 1 UPB a = 1 AND 1 ELEMS a = 1);
+      ASSERT (2 LWB a = 1 AND 2 UPB a = 1 AND 2 ELEMS a = 1);
+      ASSERT (3 LWB a = 1 AND 3 UPB a = 1 AND 3 ELEMS a = 1);
+      a[1,1,1] := a[1,1,1] + 1;
+      ASSERT (a[1,1,1] = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-12.a68 b/gcc/testsuite/algol68/execute/rowing-12.a68
new file mode 100644 (file)
index 0000000..d0bb7b4
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing of NIL yields NIL.  #
+BEGIN REF INT i = NIL;
+      REF[]INT a = i;
+      ASSERT (a :=: NIL)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-13.a68 b/gcc/testsuite/algol68/execute/rowing-13.a68
new file mode 100644 (file)
index 0000000..9ac2517
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing of NIL yields NIL.  #
+BEGIN REF INT i = (NIL);
+      REF[,,]INT a = (i);
+      ASSERT (a :=: NIL)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-2.a68 b/gcc/testsuite/algol68/execute/rowing-2.a68
new file mode 100644 (file)
index 0000000..d8c66de
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [][]INT a = 10;
+      ASSERT (a[1][1] = 10);
+      ASSERT (LWB a = 1 AND UPB a = 1 AND ELEMS a = 1);
+      ASSERT (LWB a[1] = 1 AND UPB a[1] = 1 AND ELEMS a[1] = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-3.a68 b/gcc/testsuite/algol68/execute/rowing-3.a68
new file mode 100644 (file)
index 0000000..bfb8fd3
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [][][]INT a = 10;
+      ASSERT (a[1][1][1] = 10);
+      ASSERT (LWB a = 1 AND UPB a = 1 AND ELEMS a = 1);
+      ASSERT (LWB a[1] = 1 AND UPB a[1] = 1 AND ELEMS a[1] = 1);
+      ASSERT (LWB a[1][1] = 1 AND UPB a[1][1] = 1 AND ELEMS a[1][1] = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-4.a68 b/gcc/testsuite/algol68/execute/rowing-4.a68
new file mode 100644 (file)
index 0000000..0dd540d
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE FOO = STRUCT (INT i, REAL r);
+      FOO foo = (10, 3.14);
+      [][]FOO a = foo;
+      ASSERT (LWB a = 1 AND UPB a = 1 AND ELEMS a = 1);
+      ASSERT (LWB a[1] = 1 AND UPB a[1] = 1 AND ELEMS a[1] = 1);
+      ASSERT (i OF a[1][1] = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-5.a68 b/gcc/testsuite/algol68/execute/rowing-5.a68
new file mode 100644 (file)
index 0000000..2172617
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing of a name.  #
+BEGIN INT i := 10;
+      REF[]INT a = i;
+      ASSERT (LWB a = 1 AND UPB a = 1 AND ELEMS a = 1);
+      a[1] := a[1] + 1;
+      ASSERT (a[1] = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-6.a68 b/gcc/testsuite/algol68/execute/rowing-6.a68
new file mode 100644 (file)
index 0000000..9fb050a
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing of NIL yields NIL.  #
+BEGIN REF[]INT a = REF INT(NIL);
+      ASSERT (a :=: NIL)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-7.a68 b/gcc/testsuite/algol68/execute/rowing-7.a68
new file mode 100644 (file)
index 0000000..dde8392
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT a = 10;
+      ASSERT (1 LWB a = 1 AND 1 UPB a = 1 AND 1 ELEMS a = 1);
+      ASSERT (2 LWB a = 1 AND 2 UPB a = 1 AND 2 ELEMS a = 1);
+      ASSERT (a[1,1] = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-8.a68 b/gcc/testsuite/algol68/execute/rowing-8.a68
new file mode 100644 (file)
index 0000000..069ee3e
--- /dev/null
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT a = 10;
+      ASSERT (1 LWB a = 1 AND 1 UPB a = 1 AND 1 ELEMS a = 1);
+      [,]INT aa = a;
+      ASSERT (1 LWB aa = 1 AND 1 UPB aa = 1 AND 1 ELEMS aa = 1);
+      ASSERT (2 LWB aa = 1 AND 2 UPB aa = 1 AND 2 ELEMS aa = 1);
+      [,,]INT aaa = aa;
+      ASSERT (1 LWB aaa = 1 AND 1 UPB aaa = 1 AND 1 ELEMS aaa = 1);
+      ASSERT (2 LWB aaa = 1 AND 2 UPB aaa = 1 AND 2 ELEMS aaa = 1);
+      ASSERT (3 LWB aaa = 1 AND 3 UPB aaa = 1 AND 3 ELEMS aaa = 1);
+      ASSERT (aaa[1,1,1] = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/rowing-9.a68 b/gcc/testsuite/algol68/execute/rowing-9.a68
new file mode 100644 (file)
index 0000000..5e34721
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,,]INT aaa = 10;
+      ASSERT (1 LWB aaa = 1 AND 1 UPB aaa = 1 AND 1 ELEMS aaa = 1);
+      ASSERT (2 LWB aaa = 1 AND 2 UPB aaa = 1 AND 2 ELEMS aaa = 1);
+      ASSERT (3 LWB aaa = 1 AND 3 UPB aaa = 1 AND 3 ELEMS aaa = 1);
+      ASSERT (aaa[1,1,1] = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-1.a68 b/gcc/testsuite/algol68/execute/selection-1.a68
new file mode 100644 (file)
index 0000000..c7087b2
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Selecting a struct results in a sub-value.  #
+BEGIN MODE PERSON = STRUCT (INT age, REAL income, INT num children);
+      PERSON person = (44, 999.99, 0);
+      ASSERT (age OF person = 44);
+      ASSERT (num children OF person = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-2.a68 b/gcc/testsuite/algol68/execute/selection-2.a68
new file mode 100644 (file)
index 0000000..0d7b6c6
--- /dev/null
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+# Selecting a struct name results in sub-names.  #
+BEGIN MODE PERSON = STRUCT (INT age, REAL income, INT num children);
+      PERSON person;
+      age OF person := 44;
+      income OF person := 999.99;
+      num children OF person := 0;
+      ASSERT (age OF person = 44);
+      ASSERT (num children OF person = 0);
+      REF INT ptr to age := age OF person;
+      ASSERT (ptr to age = 44);
+      age OF person := 55;
+      ASSERT (ptr to age = 55)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-3.a68 b/gcc/testsuite/algol68/execute/selection-3.a68
new file mode 100644 (file)
index 0000000..8648003
--- /dev/null
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+# Structs can be nested in other structs.  #
+BEGIN MODE INCOME = STRUCT (REAL salary, stock, INT code);
+      MODE PERSON = STRUCT (INT age, INCOME income, INT num children);
+
+      PERSON person = (44, (999.99, 0.0, 10), 3);
+
+      ASSERT (age OF person = 44);
+      ASSERT (code OF income OF person = 10);
+      ASSERT (num children OF person = 3);
+      ASSERT (num children OF person * code OF income OF person = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-4.a68 b/gcc/testsuite/algol68/execute/selection-4.a68
new file mode 100644 (file)
index 0000000..9e81db2
--- /dev/null
@@ -0,0 +1,19 @@
+# { dg-options "-fstropping=upper" }  #
+# Structs can be nested in other structs.  Version with subnames.  #
+BEGIN MODE INCOME = STRUCT (REAL salary, stock, INT code);
+      MODE PERSON = STRUCT (INT age, INCOME income, INT num children);
+
+      PERSON person;
+
+      age OF person := 44;
+      salary OF income OF person := 999.99;
+      stock OF income OF person := 0.0;
+      num children OF person := 3;
+      code OF income OF person := num children OF person;
+
+      ASSERT (age OF person = 44);
+      ASSERT (code OF income OF person = num children OF person);
+      ASSERT (code OF income OF person = 3);
+      ASSERT (num children OF person = 3);
+      ASSERT (num children OF person * code OF income OF person = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-5.a68 b/gcc/testsuite/algol68/execute/selection-5.a68
new file mode 100644 (file)
index 0000000..fde72d5
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# pr UPPER pr  #
+BEGIN MODE JORL = STRUCT (INT i, REAL r);
+      REF JORL jorl = LOC JORL := (10, 3.14);
+      ASSERT (i OF jorl = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/selection-multiple-1.a68 b/gcc/testsuite/algol68/execute/selection-multiple-1.a68
new file mode 100644 (file)
index 0000000..1dc67ea
--- /dev/null
@@ -0,0 +1,12 @@
+begin [10]struct (int age, string name) persons;
+
+      for i to UPB persons
+      do age of persons[i] := 20 + i;
+         name of persons[i] := "x" * i
+      od;
+
+      for i to UPB name of persons
+      do assert ((age of persons)[i] = 20 + i);
+         assert ((name of persons)[i] = "x" * i)
+      od
+end
diff --git a/gcc/testsuite/algol68/execute/selection-multiple-2.a68 b/gcc/testsuite/algol68/execute/selection-multiple-2.a68
new file mode 100644 (file)
index 0000000..89f848d
--- /dev/null
@@ -0,0 +1,18 @@
+begin [10,5]struct (int age, string name) persons;
+
+      for i to 1 UPB persons
+      do for j to 2 UPB persons
+         do age of persons[i,j] := 20 + i + j;
+            name of persons[i,j] := "x" * (i + j)
+         od
+      od;
+
+      assert (1 UPB name of persons = 10);
+      assert (2 UPB name of persons = 5);
+      for i to 1 UPB name of persons
+      do for j to 2 UPB name of persons
+         do assert ((age of persons)[i,j] = 20 + i + j);
+            assert ((name of persons)[i,j] = "x" * (i + j))
+         od
+      od
+end
diff --git a/gcc/testsuite/algol68/execute/serial-clause-1.a68 b/gcc/testsuite/algol68/execute/serial-clause-1.a68
new file mode 100644 (file)
index 0000000..7253f3f
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      BEGIN INT i = 20; # { dg-warning "hides" } #
+            ASSERT (i = 20);
+            i
+      END;
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-10.a68 b/gcc/testsuite/algol68/execute/serial-clause-10.a68
new file mode 100644 (file)
index 0000000..294fc6c
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# NIL is not voided and can appear in a context requiring VOID.  #
+BEGIN (NIL);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-2.a68 b/gcc/testsuite/algol68/execute/serial-clause-2.a68
new file mode 100644 (file)
index 0000000..e333c5c
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN ASSERT (i = 0);
+            i
+      END;
+      INT i = 10;
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-3.a68 b/gcc/testsuite/algol68/execute/serial-clause-3.a68
new file mode 100644 (file)
index 0000000..821c4dc
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (i = 0);
+      INT i = 10;
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-4.a68 b/gcc/testsuite/algol68/execute/serial-clause-4.a68
new file mode 100644 (file)
index 0000000..2a03f65
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      BEGIN ASSERT (i = 10);
+            i +:= 1
+      END;
+      ASSERT (i = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-5.a68 b/gcc/testsuite/algol68/execute/serial-clause-5.a68
new file mode 100644 (file)
index 0000000..89ab26e
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BEGIN ASSERT (i = 0);
+            i
+      END;
+      INT i := 10;
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-6.a68 b/gcc/testsuite/algol68/execute/serial-clause-6.a68
new file mode 100644 (file)
index 0000000..13a132f
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ((INT y := 10;
+               INT x := 20;
+               REF INT yy;
+               (REF INT xx := x;
+                yy := y;
+                xx := yy
+               )
+              ) = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-7.a68 b/gcc/testsuite/algol68/execute/serial-clause-7.a68
new file mode 100644 (file)
index 0000000..a33da4a
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ((INT y := 10;
+               INT x := 20;
+               REF INT yy;
+               (REF INT xx := x;
+                yy := y;
+                xx + yy
+               )
+              ) = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-8.a68 b/gcc/testsuite/algol68/execute/serial-clause-8.a68
new file mode 100644 (file)
index 0000000..9d32e85
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ((INT y := 10;
+               INT x := 20;
+               REF INT yy;
+               (REF INT xx := x;
+                yy := y;
+                xx
+               )
+              ) = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-clause-9.a68 b/gcc/testsuite/algol68/execute/serial-clause-9.a68
new file mode 100644 (file)
index 0000000..d8fe7c4
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# Serial clause with jump at the end.  #
+
+BEGIN INT i := BEGIN BOOL cont := TRUE;
+               back: cont := FALSE;
+                     IF cont THEN GOTO back FI
+               END;
+      ASSERT (i = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-1.a68 b/gcc/testsuite/algol68/execute/serial-dsa-1.a68
new file mode 100644 (file)
index 0000000..b27ad8c
--- /dev/null
@@ -0,0 +1,18 @@
+{ This tests stack management for DSA serial clauses.
+  If it fails a stack overflow happens.  }
+begin { DSA due to stack allocated multiple.  }
+      to 10000
+      do [10000]int foo;
+         skip
+      od;
+      { DSA due to stack allocated multiple.  Explicit loc.  }
+      to 10000
+      do loc[10000]int foo;
+         skip
+      od;
+      { DSA due to loc generator.  }
+      to 10000
+      do ref[]int jorl = loc [10000]int;
+         skip
+      od
+end
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-2.a68 b/gcc/testsuite/algol68/execute/serial-dsa-2.a68
new file mode 100644 (file)
index 0000000..ca8594d
--- /dev/null
@@ -0,0 +1,6 @@
+{ Check value yielding of DSA serial clauses.  }
+begin assert ((ref int foo = loc int := 100;
+               foo) = 100);
+      []int a = ([10000]int foo; foo[10] := 666; foo);
+      assert (a[10] = 666)
+end
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-3.a68 b/gcc/testsuite/algol68/execute/serial-dsa-3.a68
new file mode 100644 (file)
index 0000000..7cb96dd
--- /dev/null
@@ -0,0 +1,12 @@
+{ The jump to leak should not leak stack.  }
+begin by 10000
+      do
+         by 10000
+         do [10000]int foo;
+            skip;
+            goto leak
+         od;
+      leak:
+         skip
+      od
+end
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-4.a68 b/gcc/testsuite/algol68/execute/serial-dsa-4.a68
new file mode 100644 (file)
index 0000000..b132af8
--- /dev/null
@@ -0,0 +1,4 @@
+begin (ref int a = loc int := 10; goto leak; a);
+leak:
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-5.a68 b/gcc/testsuite/algol68/execute/serial-dsa-5.a68
new file mode 100644 (file)
index 0000000..fb57d5e
--- /dev/null
@@ -0,0 +1,3 @@
+begin assert ((ref int a = loc int := 10; a) + 1 = 11);
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/serial-dsa-6.a68 b/gcc/testsuite/algol68/execute/serial-dsa-6.a68
new file mode 100644 (file)
index 0000000..fb17d2d
--- /dev/null
@@ -0,0 +1,4 @@
+{ DSA and completers in a serial clause.  }
+begin assert ((ref int a = loc int := 10; a exit foo: a +:= 1) + 1 = 11);
+      skip
+end
diff --git a/gcc/testsuite/algol68/execute/sign-int-1.a68 b/gcc/testsuite/algol68/execute/sign-int-1.a68
new file mode 100644 (file)
index 0000000..3c6d317
--- /dev/null
@@ -0,0 +1,28 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT zero = 0;
+      SHORT INT short zero = SHORT 0;
+      SHORT SHORT INT short short zero = SHORT SHORT 0;
+      LONG INT long zero = LONG 0;
+      LONG LONG INT long long zero = LONG LONG 0;
+      INT ten = 10;
+      SHORT INT short ten = SHORT 10;
+      SHORT SHORT INT short short ten = SHORT SHORT 10;
+      LONG INT long ten = LONG 10;
+      LONG LONG INT long long ten = LONG LONG 10;
+      ASSERT (SIGN zero = 0);
+      ASSERT (SIGN short zero = 0);
+      ASSERT (SIGN short short zero = 0);
+      ASSERT (SIGN long zero = 0);
+      ASSERT (SIGN long long zero = 0);
+      ASSERT (SIGN ten = 1);
+      ASSERT (SIGN short ten = 1);
+      ASSERT (SIGN short short ten = 1);
+      ASSERT (SIGN long ten = 1);
+      ASSERT (SIGN long long ten = 1);
+      ASSERT (SIGN -ten = -1);
+      ASSERT (SIGN -short ten = -1);
+      ASSERT (SIGN -short short ten = -1);
+      ASSERT (SIGN -long ten = -1);
+      ASSERT (SIGN -long long ten = -1)
+END
+
diff --git a/gcc/testsuite/algol68/execute/sign-real-1.a68 b/gcc/testsuite/algol68/execute/sign-real-1.a68
new file mode 100644 (file)
index 0000000..f15fe96
--- /dev/null
@@ -0,0 +1,17 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL zero = 0.0;
+      LONG REAL long zero = LONG 0.0;
+      LONG LONG REAL long long zero = LONG LONG 0.0;
+      REAL ten = 10.0;
+      LONG REAL long ten = LONG 10.0;
+      LONG LONG REAL long long ten = LONG LONG 10.0;
+      ASSERT (SIGN zero = 0);
+      ASSERT (SIGN long zero = 0);
+      ASSERT (SIGN long long zero = 0);
+      ASSERT (SIGN ten = 1);
+      ASSERT (SIGN long ten = 1);
+      ASSERT (SIGN long long ten = 1);
+      ASSERT (SIGN -ten = -1);
+      ASSERT (SIGN -long ten = -1);
+      ASSERT (SIGN -long long ten = -1)
+END
diff --git a/gcc/testsuite/algol68/execute/sin-1.a68 b/gcc/testsuite/algol68/execute/sin-1.a68
new file mode 100644 (file)
index 0000000..aac74f9
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 0.0;
+      LONG REAL rr = LONG 45.0;
+      LONG LONG REAL rrr = LONG LONG 60.0;
+      ASSERT (sin (r) = 0.0);
+      long sin (rr);
+      long long sin (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/skip-1.a68 b/gcc/testsuite/algol68/execute/skip-1.a68
new file mode 100644 (file)
index 0000000..a36de4f
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+# Check SKIPs for INT modes #
+BEGIN INT int skip = SKIP;
+      ASSERT (int skip = 0);
+      SHORT INT short int skip = SKIP;
+      ASSERT (short int skip = SHORT 0);
+      SHORT SHORT INT short short int skip = SKIP;
+      ASSERT (short short int skip = SHORT SHORT 0);
+      LONG INT long int skip = SKIP;
+      ASSERT (long int skip = LONG 0);
+      LONG LONG INT long long int skip = SKIP;
+      ASSERT (long long int skip = LONG LONG 0)
+END
diff --git a/gcc/testsuite/algol68/execute/skip-2.a68 b/gcc/testsuite/algol68/execute/skip-2.a68
new file mode 100644 (file)
index 0000000..5cefe40
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Check SKIP values for BOOL and CHAR. #
+BEGIN BOOL bool skip = SKIP;
+      ASSERT (bool skip = FALSE);
+      CHAR char skip = SKIP;
+      ASSERT (char skip = " ")
+END
diff --git a/gcc/testsuite/algol68/execute/skip-struct-1.a68 b/gcc/testsuite/algol68/execute/skip-struct-1.a68
new file mode 100644 (file)
index 0000000..72e9a11
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE INCOME = STRUCT (REAL salary, stock, INT jorl);
+      MODE PERSON = STRUCT (INT age, INCOME income, INT num children);
+      PERSON person = SKIP;
+      ASSERT (age OF person = 0);
+      ASSERT (jorl OF income OF person = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-1.a68 b/gcc/testsuite/algol68/execute/slice-indexing-1.a68
new file mode 100644 (file)
index 0000000..53d14fa
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "foo";
+      ASSERT (foo[1] = "f");
+      ASSERT (foo[2] = "o");
+      ASSERT (foo[3] = "o");
+      STRING bar := "foo";
+      ASSERT (bar[1] = "f");
+      ASSERT (bar[2] = "o");
+      ASSERT (bar[3] = "o")
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-2.a68 b/gcc/testsuite/algol68/execute/slice-indexing-2.a68
new file mode 100644 (file)
index 0000000..defb675
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT foo = (1,2,3);
+      ASSERT (foo[1] = 1);
+      ASSERT (foo[2] = 2);
+      ASSERT (foo[3] = 3);
+      [3]INT bar := (1,2,3);
+      ASSERT (bar[1] = 1);
+      ASSERT (bar[2] = 2);
+      ASSERT (bar[3] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-3.a68 b/gcc/testsuite/algol68/execute/slice-indexing-3.a68
new file mode 100644 (file)
index 0000000..593bd71
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT foo = (10,20,30);
+      ASSERT (foo[1] = 10);
+      ASSERT (foo[2] = 20);
+      ASSERT (foo[3] = 30);
+      [3]INT bar := (100,200,300);
+      ASSERT (bar[1] = 100);
+      ASSERT (bar[2] = 200);
+      ASSERT (bar[3] = 300)
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-4.a68 b/gcc/testsuite/algol68/execute/slice-indexing-4.a68
new file mode 100644 (file)
index 0000000..bf3a3b1
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE PERSON = STRUCT (INT i, STRING s);
+      []PERSON persons = ((10, "foo"), (20, "barbar"), (30, "baz"));
+      puts (s OF persons[1]);
+      puts (s OF persons[2]);
+      puts (s OF persons[3]);
+      ASSERT (i OF persons[1] = 10);
+      ASSERT (i OF persons[2] = 20);
+      ASSERT (i OF persons[3] = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-5.a68 b/gcc/testsuite/algol68/execute/slice-indexing-5.a68
new file mode 100644 (file)
index 0000000..f236eef
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRUCT([]INT i, REAL r) s = ((1,2,3), 3.14);
+      ASSERT ((i OF s)[1] = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-6.a68 b/gcc/testsuite/algol68/execute/slice-indexing-6.a68
new file mode 100644 (file)
index 0000000..8d79556
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT rsp := 5;
+      [10]INT run stack;
+      run stack [(rsp -:= 1) + 1]
+END
diff --git a/gcc/testsuite/algol68/execute/slice-indexing-7.a68 b/gcc/testsuite/algol68/execute/slice-indexing-7.a68
new file mode 100644 (file)
index 0000000..d3870f6
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING s := "foo";
+      s[2] := "x"
+END
diff --git a/gcc/testsuite/algol68/execute/sqrt-1.a68 b/gcc/testsuite/algol68/execute/sqrt-1.a68
new file mode 100644 (file)
index 0000000..725a772
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 100.0;
+      LONG REAL rr = LONG 25.0;
+      LONG LONG REAL rrr = LONG LONG 25.0;
+      ASSERT (sqrt (r) = 10.0);
+      ASSERT (long sqrt (rr) = LONG 5.0);
+      ASSERT (long long sqrt (rrr) = LONG LONG 5.0)
+END
diff --git a/gcc/testsuite/algol68/execute/string-1.a68 b/gcc/testsuite/algol68/execute/string-1.a68
new file mode 100644 (file)
index 0000000..28e44fe
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING s = "";
+      ASSERT (LWB s = 1 AND UPB s = 0);
+      STRING t = ();
+      ASSERT (LWB t = 1 AND UPB t = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/string-2.a68 b/gcc/testsuite/algol68/execute/string-2.a68
new file mode 100644 (file)
index 0000000..b0b898a
--- /dev/null
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING s;
+      ASSERT (LWB s = 1 AND UPB s = 0 AND ELEMS s = 0);
+      s := "foo";
+      puts (s);
+      ASSERT (LWB s = 1 AND UPB s = 3 AND s[1] = "f" AND s[2] = "o" AND s[3] = "o");
+      s := "bar";
+      puts (s);
+      ASSERT (LWB s = 1 AND UPB s = 3 AND s[1] = "b" AND s[2] = "a" AND s[3] = "r");
+      s := "x";
+      ASSERT (LWB s = 1 AND UPB s = 1 AND s[1] = "x");
+      puts (s)
+END
diff --git a/gcc/testsuite/algol68/execute/string-4.a68 b/gcc/testsuite/algol68/execute/string-4.a68
new file mode 100644 (file)
index 0000000..984d662
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING s;
+      ASSERT (LWB s = 1 AND UPB s = 0 AND ELEMS s = 0);
+      s +:= "foo";
+      ASSERT (LWB s = 1 AND UPB s = 3 AND ELEMS s = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/string-break-1.a68 b/gcc/testsuite/algol68/execute/string-break-1.a68
new file mode 100644 (file)
index 0000000..e99cfe9
--- /dev/null
@@ -0,0 +1,8 @@
+begin assert (UPB "foo'nbar" = 7 AND "foo'nbar"[4] = REPR 10);
+      assert (UPB "foo'tbar" = 7 AND "foo'tbar"[4] = REPR 9);
+      assert (UPB "foo'rbar" = 7 AND "foo'rbar"[4] = REPR 13);
+      assert (UPB "foo'fbar" = 7 AND "foo'fbar"[4] = REPR 12);
+      assert (UPB "foo''bar" = 7 AND "foo''bar"[4] = REPR 39);
+      assert ("'(u0048,u0065,U0000006c,u006c,U0000006f)" = "Hello");
+      assert ("'( u0048,   u0065,   U0000006c,u006c,     U0000006f  )" = "Hello")
+end
diff --git a/gcc/testsuite/algol68/execute/struct-self-1.a68 b/gcc/testsuite/algol68/execute/struct-self-1.a68
new file mode 100644 (file)
index 0000000..94622aa
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT code, REF NODE next);
+      NODE top;
+      ASSERT (next OF top :=: REF NODE (NIL))
+END
diff --git a/gcc/testsuite/algol68/execute/struct-self-2.a68 b/gcc/testsuite/algol68/execute/struct-self-2.a68
new file mode 100644 (file)
index 0000000..a1127eb
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT code, REF NODE next);
+      NODE top = (20, NIL);
+      ASSERT (code OF top = 20);
+      ASSERT (next OF top :=: NIL)
+END
diff --git a/gcc/testsuite/algol68/execute/struct-self-3.a68 b/gcc/testsuite/algol68/execute/struct-self-3.a68
new file mode 100644 (file)
index 0000000..3829daf
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT code, REF NODE next);
+      NODE top := (10, NIL);
+      NODE next := (20, NIL);
+      next OF top := next;
+      ASSERT (code OF next OF top = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/structure-display-1.a68 b/gcc/testsuite/algol68/execute/structure-display-1.a68
new file mode 100644 (file)
index 0000000..a53c247
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE INCOME = STRUCT (REAL salary, stock, INT code);
+      MODE PERSON = STRUCT (INT age, INCOME income, INT num children);
+      INCOME income = (100.0, 200.0, 300);
+      ASSERT (code OF income = 300);
+      PERSON person := (24, (1000.0, 2000.0, 3000), 3);
+      ASSERT (code OF income OF person = 3000);
+      ASSERT (num children OF person = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/structure-display-2.a68 b/gcc/testsuite/algol68/execute/structure-display-2.a68
new file mode 100644 (file)
index 0000000..563f979
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT code, REF INT next);
+      INT val := 20;
+      NODE top = (10, val);
+      ASSERT (val = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/structure-display-3.a68 b/gcc/testsuite/algol68/execute/structure-display-3.a68
new file mode 100644 (file)
index 0000000..178463f
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE FOO = STRUCT (INT i, REF INT j);
+      INT x := 10;
+      FOO foo;
+      foo := (10, x);
+      ASSERT (j OF foo = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/structure-display-4.a68 b/gcc/testsuite/algol68/execute/structure-display-4.a68
new file mode 100644 (file)
index 0000000..2a69172
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE FOO = STRUCT (INT i, REF INT j);
+      INT x := 10;
+      REF INT xx;
+      FOO foo;
+      foo := (10, xx := x);
+      ASSERT (j OF foo = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/structure-display-5.a68 b/gcc/testsuite/algol68/execute/structure-display-5.a68
new file mode 100644 (file)
index 0000000..0b99113
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE VEC = STRUCT (REAL xcoord, ycoord, zcoord);
+      VEC v1, v2, v3;
+      v1 := (1,1,1);
+      ASSERT (xcoord OF v1 = 1);
+      ASSERT (ycoord OF v1 = 1);
+      ASSERT (zcoord OF v1 = 1);
+      REAL x = 3.14, i = 3;
+      v2 := (x + 2, 3.4, i - 3)
+END
diff --git a/gcc/testsuite/algol68/execute/tan-1.a68 b/gcc/testsuite/algol68/execute/tan-1.a68
new file mode 100644 (file)
index 0000000..a7aede6
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 0.0;
+      LONG REAL rr = LONG 50.0;
+      LONG LONG REAL rrr = LONG LONG 50.0;
+      ASSERT (tan (r) = 0.0);
+      long tan (rr);
+      long long tan (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/timesab-string-1.a68 b/gcc/testsuite/algol68/execute/timesab-string-1.a68
new file mode 100644 (file)
index 0000000..3ff48fe
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo := "foo";
+      foo TIMESAB 1;
+      ASSERT (foo = "foo");
+      foo *:= 3;
+      ASSERT (foo = "foofoofoo")
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-1.a68 b/gcc/testsuite/algol68/execute/trimmer-1.a68
new file mode 100644 (file)
index 0000000..feae4ce
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[2:3@20];
+      ASSERT (LWB jorl = 20 AND UPB jorl = 21);
+      ASSERT (jorl[20] = 1 AND jorl [21] = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-10.a68 b/gcc/testsuite/algol68/execute/trimmer-10.a68
new file mode 100644 (file)
index 0000000..66db83a
--- /dev/null
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+# Trimming with flat descriptors should lead to flat multiples.  #
+BEGIN []INT a = (1,2,3);
+
+      ASSERT (UPB a[2:1] < LWB a[2:1]);
+      ASSERT (UPB a[20:2] < LWB a[20:2]);
+
+      [,]INT aa = ((1,2,3),
+                   (4,5,6),
+                   (7,8,9));
+      
+      ASSERT ((1 UPB aa[1,2:1]) < ((1 LWB aa[1,2:1])));
+      ASSERT ((1 UPB aa[1,20:]) < ((1 LWB aa[1,20:])))
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-2.a68 b/gcc/testsuite/algol68/execute/trimmer-2.a68
new file mode 100644 (file)
index 0000000..68996d2
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[2:3];
+      ASSERT (LWB jorl = 1 AND UPB jorl = 2);
+      ASSERT (jorl[1] = 1 AND jorl [2] = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-3.a68 b/gcc/testsuite/algol68/execute/trimmer-3.a68
new file mode 100644 (file)
index 0000000..8af69db
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[:@20];
+      ASSERT (LWB jorl = 20 AND UPB jorl = 22);
+      ASSERT (jorl[20] = 1 AND jorl[21] = 2 AND jorl[22] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-4.a68 b/gcc/testsuite/algol68/execute/trimmer-4.a68
new file mode 100644 (file)
index 0000000..fdcd370
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[3:];
+      ASSERT (LWB jorl = 1 AND UPB jorl = 2);
+      ASSERT (jorl[1] = 2 AND jorl[2] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-5.a68 b/gcc/testsuite/algol68/execute/trimmer-5.a68
new file mode 100644 (file)
index 0000000..892fea7
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[:3 AT 10];
+      ASSERT (LWB jorl = 10 AND UPB jorl = 11);
+      ASSERT (jorl[10] = 1 AND jorl[11] = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-6.a68 b/gcc/testsuite/algol68/execute/trimmer-6.a68
new file mode 100644 (file)
index 0000000..3e9f293
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      []INT jorl = arr[:3@10];
+      ASSERT (LWB jorl = 10 AND UPB jorl = 11);
+      ASSERT (jorl[10] = 1 AND jorl[11] = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-7.a68 b/gcc/testsuite/algol68/execute/trimmer-7.a68
new file mode 100644 (file)
index 0000000..8d3ebf9
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT arr = (1,2,3);
+      ASSERT (arr[2] = 2 AND arr[3] = 3);
+      []INT jorl = arr[2:3@20];
+      ASSERT (LWB jorl = 20 AND UPB jorl = 21);
+      ASSERT (jorl[20] = 2 AND jorl [21] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-8.a68 b/gcc/testsuite/algol68/execute/trimmer-8.a68
new file mode 100644 (file)
index 0000000..50842ef
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [2:4]INT arr := []INT(1,2,3)[@2];
+      ASSERT (arr[3] = 2 AND arr[4] = 3);
+      [10:11]INT jorl := arr[:3 AT 10];
+      ASSERT (LWB jorl = 10 AND UPB jorl = 11);
+      ASSERT (jorl[10] = 1 AND jorl[11] = 2);
+      jorl[10] := 100;
+      ASSERT (jorl[10] = 100 AND jorl[11] = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-9.a68 b/gcc/testsuite/algol68/execute/trimmer-9.a68
new file mode 100644 (file)
index 0000000..aa0d52d
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT arr = (1,2,3);
+      ASSERT (arr[2] = 2 AND arr[3] = 3);
+      []INT jorl = arr[@20];
+      ASSERT (LWB jorl = 20 AND UPB jorl = 22);
+      ASSERT (jorl[20] = 1 AND jorl [21] = 2 AND jorl [22] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-1.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-1.a68
new file mode 100644 (file)
index 0000000..2cec8a8
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      [2]INT column := matrix[3,2:3];
+      ASSERT (column[1] = 8);
+      ASSERT (column[2] = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-2.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-2.a68
new file mode 100644 (file)
index 0000000..6ca961f
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      [2]INT column := matrix[2,1:2];
+      ASSERT (column[1] = 4);
+      ASSERT (column[2] = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-3.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-3.a68
new file mode 100644 (file)
index 0000000..5de2bee
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      [3]INT column := matrix[2,1:3];
+      ASSERT (column[1] = 4);
+      ASSERT (column[2] = 5);
+      ASSERT (column[3] = 6)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-4.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-4.a68
new file mode 100644 (file)
index 0000000..71168ad
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      []INT column = matrix[1:3,2];
+      ASSERT (LWB column = 1);
+      ASSERT (UPB column = 3);
+      ASSERT (column[1] = 2 AND column[2] = 5 AND column[3] = 8)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-5.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-5.a68
new file mode 100644 (file)
index 0000000..6d5f69b
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      []INT column = matrix[2:3,2];
+      ASSERT (LWB column = 1);
+      ASSERT (UPB column = 2);
+      ASSERT (column[1] = 5 AND column[2] = 8)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-matrix-6.a68 b/gcc/testsuite/algol68/execute/trimmer-matrix-6.a68
new file mode 100644 (file)
index 0000000..59a3389
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]INT matrix = ((1,2,3),
+                       (4,5,6),
+                       (7,8,9));
+      []INT row = matrix[3,1:3];
+      ASSERT (LWB row = 1);
+      ASSERT (UPB row = 3);
+      ASSERT (row[1] = 7 AND row[2] = 8 AND row[3] = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/trimmer-name-1.a68 b/gcc/testsuite/algol68/execute/trimmer-name-1.a68
new file mode 100644 (file)
index 0000000..6b4601c
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF[]CHAR t;
+      PROC foo = VOID: (HEAP[3]CHAR ss := ("1","2","3"); t := ss[1:3]);
+      foo;
+      ASSERT (LWB t = 1 AND UPB t = 3);
+      ASSERT (t[1] = "1" AND t[2] = "2" AND t[3] = "3")
+END
diff --git a/gcc/testsuite/algol68/execute/undefined-1.a68 b/gcc/testsuite/algol68/execute/undefined-1.a68
new file mode 100644 (file)
index 0000000..af97a0c
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+# j's value is undefined (defined to be 0 in GNU Algol)  #
+BEGIN INT x := 0;
+      FOR i TO 5
+      DO ASSERT (j = 0);
+         IF j > 20 THEN stop FI;
+         INT j = x + i;
+         x +:= 1
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/undefined-2.a68 b/gcc/testsuite/algol68/execute/undefined-2.a68
new file mode 100644 (file)
index 0000000..54addde
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# The undefined value of the multiple `a' is an empty multiple. #
+BEGIN ASSERT (i = 0);
+      ASSERT (LWB a = 1 AND UPB a = 0 AND ELEMS a = 0);
+      []INT a = (1, 2, 3);
+      INT i = 10;
+      ASSERT (i = 10);
+      ASSERT (LWB a = 1 AND UPB a = 3 AND ELEMS a = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/undefined-3.a68 b/gcc/testsuite/algol68/execute/undefined-3.a68
new file mode 100644 (file)
index 0000000..2a746ad
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (sum = 1);
+      PROC sum = INT: i + 1;
+      INT i = 10;
+      ASSERT (sum = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/undefined-4.a68 b/gcc/testsuite/algol68/execute/undefined-4.a68
new file mode 100644 (file)
index 0000000..c602c05
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is even = (INT n) BOOL: (n = zero | TRUE | is odd (n - 1));
+      PROC is odd = (INT n) BOOL: (n = zero | FALSE | is even (n - 1));
+      ASSERT (is even (20));
+      ASSERT (is odd (13));
+      INT zero := 0;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/undefined-5.a68 b/gcc/testsuite/algol68/execute/undefined-5.a68
new file mode 100644 (file)
index 0000000..3cbb414
--- /dev/null
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is even = (INT n) BOOL: (n = zero | TRUE | is odd (DECR n));
+      PROC is odd = (INT n) BOOL: (n = zero | FALSE | is even (DECR n));
+      OP DECR = (INT a) INT:  a - 1;
+      ASSERT (is even (20));
+      ASSERT (is odd (13));
+      INT zero := 0;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/uniting-1.a68 b/gcc/testsuite/algol68/execute/uniting-1.a68
new file mode 100644 (file)
index 0000000..dee0b50
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION(INT,REAL,CHAR) datum := 3.14;
+      UNION(INT,REAL,[]INT,CHAR) datux;
+      datux := datum;
+      ASSERT (CASE datux
+              IN (INT): 10,
+                 (REAL): 20,
+                 (CHAR c): 30
+              ESAC = 20);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/uniting-2.a68 b/gcc/testsuite/algol68/execute/uniting-2.a68
new file mode 100644 (file)
index 0000000..5650050
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION(INT,REAL,CHAR) datum := "X";
+      UNION(INT,REAL,[]INT,CHAR) datux;
+      datux := datum;
+      ASSERT (CASE datux
+              IN (INT): 10,
+                 (REAL): 20,
+                 (CHAR c): 30
+              ESAC = 30);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/uniting-3.a68 b/gcc/testsuite/algol68/execute/uniting-3.a68
new file mode 100644 (file)
index 0000000..cb73c2f
--- /dev/null
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION(INT,REAL,CHAR) datum := 10;
+      UNION(INT,REAL,[]INT,CHAR) datux;
+      datux := datum;
+      ASSERT (CASE datux
+              IN (INT): 10,
+                 (REAL): 20,
+                 (CHAR c): 30
+              ESAC = 10);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/uniting-4.a68 b/gcc/testsuite/algol68/execute/uniting-4.a68
new file mode 100644 (file)
index 0000000..c7b82b8
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Uniting STRING to ROWS.  #
+BEGIN PROC strlen = (STRING s) INT: ELEMS s;
+      ASSERT (strlen ("foo") = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/up-down-bits-1.a68 b/gcc/testsuite/algol68/execute/up-down-bits-1.a68
new file mode 100644 (file)
index 0000000..b13c055
--- /dev/null
@@ -0,0 +1,33 @@
+# { dg-options "-fstropping=upper" }  #
+# SHORTEN and LENG on SIZETY BITS #
+BEGIN BITS b = 16rff;
+      ASSERT (b UP 4 = 16rff0);
+      ASSERT (b SHL 4 = 16rff0);
+      ASSERT (b DOWN 4 = 16r0f);
+      ASSERT (b SHR 4 = 16r0f);
+
+      LONG BITS bb = LONG 16rff;
+      ASSERT (bb UP 4 = LONG 16rff0);
+      ASSERT (bb SHL 4 = LONG 16rff0);
+      ASSERT (bb DOWN 4 = LONG 16r0f);
+      ASSERT (bb SHR 4 = LONG 16r0f);
+
+      LONG LONG BITS bbb = LONG LONG 16rff;
+      ASSERT (bbb UP 4 = LONG LONG 16rff0);
+      ASSERT (bbb SHL 4 = LONG LONG 16rff0);
+      ASSERT (bbb DOWN 4 = LONG LONG 16r0f);
+      ASSERT (bbb SHR 4 = LONG LONG 16r0f);
+
+      SHORT BITS ss = SHORT 16rff;
+      ASSERT (ss UP 4 = SHORT 16rff0);
+      ASSERT (ss SHL 4 = SHORT 16rff0);
+      ASSERT (ss DOWN 4 = SHORT 16r0f);
+      ASSERT (ss SHR 4 = SHORT 16r0f);
+
+      SHORT SHORT BITS sss = SHORT SHORT 16r0f;
+      ASSERT (sss UP 4 = SHORT SHORT 16rf0);
+      ASSERT (sss SHL 4 = SHORT SHORT 16rf0);
+      ASSERT (sss DOWN 2 = SHORT SHORT 16r03);
+      ASSERT (sss SHR 2 = SHORT SHORT 16r03)
+END
+
diff --git a/gcc/testsuite/algol68/execute/upb-1.a68 b/gcc/testsuite/algol68/execute/upb-1.a68
new file mode 100644 (file)
index 0000000..d74ffa5
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (UPB "foo" = 3);
+      ASSERT (1 UPB "foo" = 3);
+      ASSERT (UPB "" = 0);
+      ASSERT ((INT i = 1; UPB "") = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/vacuum-1.a68 b/gcc/testsuite/algol68/execute/vacuum-1.a68
new file mode 100644 (file)
index 0000000..c4472c5
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT a = ();
+      ASSERT (LWB a = 1 AND UPB a = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-1.a68 b/gcc/testsuite/algol68/execute/variable-declaration-1.a68
new file mode 100644 (file)
index 0000000..0b1f4fc
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := x := 20;
+      ASSERT (xx = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-2.a68 b/gcc/testsuite/algol68/execute/variable-declaration-2.a68
new file mode 100644 (file)
index 0000000..6b80f7b
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := x;
+      ASSERT (xx = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-3.a68 b/gcc/testsuite/algol68/execute/variable-declaration-3.a68
new file mode 100644 (file)
index 0000000..4b1f080
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := (x := 20);
+      ASSERT (xx = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-4.a68 b/gcc/testsuite/algol68/execute/variable-declaration-4.a68
new file mode 100644 (file)
index 0000000..0c66d9e
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := ((x));
+      ASSERT (xx = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-5.a68 b/gcc/testsuite/algol68/execute/variable-declaration-5.a68
new file mode 100644 (file)
index 0000000..993bbe7
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF REF INT xx := LOC REF INT := x := 20;
+      ASSERT (xx = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-6.a68 b/gcc/testsuite/algol68/execute/variable-declaration-6.a68
new file mode 100644 (file)
index 0000000..4f8b1c3
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE FOO = STRUCT (STRING s, INT i);
+      FOO f1 := ("foo", 10);
+      ASSERT (i OF f1 = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-heap-1.a68 b/gcc/testsuite/algol68/execute/variable-declaration-heap-1.a68
new file mode 100644 (file)
index 0000000..e7b40a1
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN HEAP INT a := 10;
+      ASSERT (a = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-heap-2.a68 b/gcc/testsuite/algol68/execute/variable-declaration-heap-2.a68
new file mode 100644 (file)
index 0000000..406e8c5
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN HEAP INT x, y;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-1.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-1.a68
new file mode 100644 (file)
index 0000000..17864f9
--- /dev/null
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [10,3]INT arr;
+      ASSERT (1 LWB arr = 1 AND 1 UPB arr = 10 AND 1 ELEMS arr = 10);
+      ASSERT (2 LWB arr = 1 AND 2 UPB arr = 3 AND 2 ELEMS arr = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-2.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-2.a68
new file mode 100644 (file)
index 0000000..d400ee8
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n = 10;
+      [n,3]INT arr;
+      ASSERT (1 LWB arr = 1 AND 1 UPB arr = 10 AND 1 ELEMS arr = 10);
+      ASSERT (2 LWB arr = 1 AND 2 UPB arr = 3 AND 2 ELEMS arr = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-3.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-3.a68
new file mode 100644 (file)
index 0000000..a006fed
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 10, m := 3;
+      [n,m]INT arr;
+      ASSERT (1 LWB arr = 1 AND 1 UPB arr = 10 AND 1 ELEMS arr = 10);
+      ASSERT (2 LWB arr = 1 AND 2 UPB arr = 3 AND 2 ELEMS arr = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-4.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-4.a68
new file mode 100644 (file)
index 0000000..8e0467b
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := -4, m := 0;
+      [n:m,2]INT arr;
+      ASSERT (1 LWB arr = -4 AND 1 UPB arr = 0 AND 1 ELEMS arr = 5);
+      ASSERT (2 LWB arr = 1 AND 2 UPB arr = 2 AND 2 ELEMS arr = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-5.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-5.a68
new file mode 100644 (file)
index 0000000..0a1889f
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := -4, m := 0;
+      [n:m,2]INT arr;
+      FOR i FROM 1 LWB arr TO 1 UPB arr
+      DO FOR j FROM 2 LWB arr TO 2 UPB arr
+         DO ASSERT (arr[i,j] = INT(SKIP)) OD
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-6.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-6.a68
new file mode 100644 (file)
index 0000000..3dde91c
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := -4, m := 0;
+      [n:m,2]REF INT arr;
+      FOR i FROM 1 LWB arr TO 1 UPB arr
+      DO FOR j FROM 2 LWB arr TO 2 UPB arr
+         DO ASSERT (REF INT (arr[i,j]) :=: REF INT(SKIP)) OD
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-7.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-7.a68
new file mode 100644 (file)
index 0000000..75ee9a4
--- /dev/null
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 2, m := 3;
+      [n][m]INT arr;
+      FOR i FROM LWB arr TO UPB arr
+      DO FOR j FROM LWB arr[i] TO UPB arr[i]
+         DO ASSERT (arr[i][j] = INT(SKIP)) OD
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-8.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-8.a68
new file mode 100644 (file)
index 0000000..391d282
--- /dev/null
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := -4, m := 0;
+      [10][n:m,2]INT arr;
+      FOR k FROM LWB arr TO UPB arr
+      DO FOR i FROM 1 LWB arr[k] TO 1 UPB arr[k]
+         DO FOR j FROM 2 LWB arr[k] TO 2 UPB arr[k]
+            DO ASSERT (arr[k][i,j] = INT(SKIP)) OD
+         OD
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/variable-declaration-multiple-9.a68 b/gcc/testsuite/algol68/execute/variable-declaration-multiple-9.a68
new file mode 100644 (file)
index 0000000..21c20ea
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [4]INT x, y;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/voiding-1.a68 b/gcc/testsuite/algol68/execute/voiding-1.a68
new file mode 100644 (file)
index 0000000..ec6088d
--- /dev/null
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i;
+      2 = i
+END
diff --git a/gcc/testsuite/algol68/execute/widening-1.a68 b/gcc/testsuite/algol68/execute/widening-1.a68
new file mode 100644 (file)
index 0000000..642b226
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      REAL foo = i;
+      ASSERT (foo > 9.9);
+      ASSERT (foo < 10.1)
+END
diff --git a/gcc/testsuite/algol68/execute/widening-2.a68 b/gcc/testsuite/algol68/execute/widening-2.a68
new file mode 100644 (file)
index 0000000..9ac6aae
--- /dev/null
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN LONG INT i = LONG 10;
+      LONG REAL foo = i;
+      ASSERT (foo > LONG 9.9);
+      ASSERT (foo < LONG 10.1)
+END
diff --git a/gcc/testsuite/algol68/execute/widening-bits-1.a68 b/gcc/testsuite/algol68/execute/widening-bits-1.a68
new file mode 100644 (file)
index 0000000..6940a23
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# XXX use environment enquiry for actual size of BITS #
+BEGIN []BOOL foo = 16rffff;
+      ASSERT (LWB foo = 1 AND UPB foo = 32);
+      FOR i TO 16 DO ASSERT (foo[i] = FALSE) OD;
+      FOR i FROM 17 TO 32 DO ASSERT (foo[i] = TRUE) OD
+END
diff --git a/gcc/testsuite/algol68/execute/widening-bits-2.a68 b/gcc/testsuite/algol68/execute/widening-bits-2.a68
new file mode 100644 (file)
index 0000000..ea47b70
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# XXX use environment enquiry for actual size of LONG BITS #
+BEGIN []BOOL foo = LONG 16rffffffff;
+      ASSERT (LWB foo = 1 AND UPB foo = 64);
+      FOR i TO 32 DO ASSERT (foo[i] = FALSE) OD;
+      FOR i FROM 33 TO 64 DO ASSERT (foo[i] = TRUE) OD
+END
diff --git a/gcc/testsuite/algol68/execute/widening-bits-3.a68 b/gcc/testsuite/algol68/execute/widening-bits-3.a68
new file mode 100644 (file)
index 0000000..61e49da
--- /dev/null
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# XXX use environment enquiry for actual size of LONG LONG BITS #
+BEGIN []BOOL foo = LONG LONG 16rffffffff;
+      ASSERT (LWB foo = 1 AND UPB foo = 64);
+      FOR i TO 32 DO ASSERT (foo[i] = FALSE) OD;
+      FOR i FROM 33 TO 64 DO ASSERT (foo[i] = TRUE) OD
+END
diff --git a/gcc/testsuite/algol68/execute/xor-bits-1.a68 b/gcc/testsuite/algol68/execute/xor-bits-1.a68
new file mode 100644 (file)
index 0000000..beeafb5
--- /dev/null
@@ -0,0 +1,18 @@
+# { dg-options "-fstropping=upper" }  #
+# XOR for SIZETY BITS.  #
+BEGIN BITS b = 16rf0f0;
+      ASSERT ((b XOR 16r0f0f) = 16rffff);
+      ASSERT ((b XOR 16r00ff) = 16rf00f);
+      LONG BITS bb = LONG 16rf0f0;
+      ASSERT ((bb XOR LONG 16r0f0f) = LONG 16rffff);
+      ASSERT ((bb XOR LONG 16r00ff) = LONG 16rf00f);
+      LONG LONG BITS bbb = LONG LONG 16rf0f0;
+      ASSERT ((bbb XOR LONG LONG 16r0f0f) = LONG LONG 16rffff);
+      ASSERT ((bbb XOR LONG LONG 16r00ff) = LONG LONG 16rf00f);
+      SHORT BITS ss = SHORT 16rf0f0;
+      ASSERT ((ss XOR SHORT 16r0f0f) = SHORT 16rffff);
+      ASSERT ((ss XOR SHORT 16r00ff) = SHORT 16rf00f);
+      SHORT SHORT BITS sss = SHORT SHORT 16rf0;
+      ASSERT ((sss XOR SHORT SHORT 16r0f) = SHORT SHORT 16rff);
+      ASSERT ((sss XOR SHORT SHORT 16rff) = SHORT SHORT 16r0f)
+END