https://gcc.gnu.org/g:e39070324a24aee0c4846becb5973a7b54ad5cce

commit r16-5766-ge39070324a24aee0c4846becb5973a7b54ad5cce
Author: Jose E. Marchesi <[email protected]>
Date:   Sat Oct 11 19:56:27 2025 +0200

    a68: testsuite: execution tests 1/2
    
    Signed-off-by: Jose E. Marchesi <[email protected]>
    
    gcc/testsuite/ChangeLog
    
            * algol68/execute/abs-bits-1.a68: New file.
            * algol68/execute/abs-bool-1.a68: Likewise.
            * algol68/execute/abs-char-1.a68: Likewise.
            * algol68/execute/abs-int-1.a68: Likewise.
            * algol68/execute/abs-int-negative-1.a68: Likewise.
            * algol68/execute/abs-int-negative-gnu-1.a68: Likewise.
            * algol68/execute/acos-1.a68: Likewise.
            * algol68/execute/affirm-int-1.a68: Likewise.
            * algol68/execute/and-bits-1.a68: Likewise.
            * algol68/execute/andf-1.a68: Likewise.
            * algol68/execute/ascription-1.a68: Likewise.
            * algol68/execute/asin-1.a68: Likewise.
            * algol68/execute/assert-1.a68: Likewise.
            * algol68/execute/assignation-char-1.a68: Likewise.
            * algol68/execute/assignation-int-1.a68: Likewise.
            * algol68/execute/assignation-int-2.a68: Likewise.
            * algol68/execute/assignation-int-3.a68: Likewise.
            * algol68/execute/assignation-int-4.a68: Likewise.
            * algol68/execute/assignation-int-5.a68: Likewise.
            * algol68/execute/assignation-multiple-1.a68: Likewise.
            * algol68/execute/assignation-multiple-2.a68: Likewise.
            * algol68/execute/assignation-struct-1.a68: Likewise.
            * algol68/execute/assignation-struct-2.a68: Likewise.
            * algol68/execute/atan-1.a68: Likewise.
            * algol68/execute/balancing-1.a68: Likewise.
            * algol68/execute/balancing-rows-1.a68: Likewise.
            * algol68/execute/bin-1.a68: Likewise.
            * algol68/execute/bin-negative-1.a68: Likewise.
            * algol68/execute/bin-negative-gnu-1.a68: Likewise.
            * algol68/execute/boolops-1.a68: Likewise.
            * algol68/execute/call-1.a68: Likewise.
            * algol68/execute/call-2.a68: Likewise.
            * algol68/execute/case-clause-1.a68: Likewise.
            * algol68/execute/case-clause-2.a68: Likewise.
            * algol68/execute/case-clause-3.a68: Likewise.
            * algol68/execute/case-clause-4.a68: Likewise.
            * algol68/execute/closed-clause-1.a68: Likewise.
            * algol68/execute/closed-clause-2.a68: Likewise.
            * algol68/execute/collateral-clause-1.a68: Likewise.
            * algol68/execute/collateral-clause-2.a68: Likewise.
            * algol68/execute/collateral-clause-3.a68: Likewise.
            * algol68/execute/collateral-clause-4.a68: Likewise.
            * algol68/execute/collateral-clause-5.a68: Likewise.
            * algol68/execute/collateral-clause-6.a68: Likewise.
            * algol68/execute/completer-1.a68: Likewise.
            * algol68/execute/completer-10.a68: Likewise.
            * algol68/execute/completer-2.a68: Likewise.
            * algol68/execute/completer-3.a68: Likewise.
            * algol68/execute/completer-4.a68: Likewise.
            * algol68/execute/completer-5.a68: Likewise.
            * algol68/execute/completer-6.a68: Likewise.
            * algol68/execute/completer-7.a68: Likewise.
            * algol68/execute/completer-8.a68: Likewise.
            * algol68/execute/completer-9.a68: Likewise.
            * algol68/execute/cond-clause-1.a68: Likewise.
            * algol68/execute/cond-clause-2.a68: Likewise.
            * algol68/execute/cond-clause-3.a68: Likewise.
            * algol68/execute/cond-clause-4.a68: Likewise.
            * algol68/execute/cond-clause-5.a68: Likewise.
            * algol68/execute/cond-clause-6.a68: Likewise.
            * algol68/execute/cond-clause-7.a68: Likewise.
            * algol68/execute/cond-clause-8.a68: Likewise.
            * algol68/execute/cond-clause-9.a68: Likewise.
            * algol68/execute/conformity-clause-1.a68: Likewise.
            * algol68/execute/conformity-clause-2.a68: Likewise.
            * algol68/execute/conformity-clause-3.a68: Likewise.
            * algol68/execute/conformity-clause-4.a68: Likewise.
            * algol68/execute/conformity-clause-5.a68: Likewise.
            * algol68/execute/conformity-clause-6.a68: Likewise.
            * algol68/execute/conformity-clause-7.a68: Likewise.
            * algol68/execute/conformity-clause-8.a68: Likewise.
            * algol68/execute/conformity-clause-9.a68: Likewise.
            * algol68/execute/conj-1.a68: Likewise.
            * algol68/execute/cos-1.a68: Likewise.
            * algol68/execute/declarer-1.a68: Likewise.
            * algol68/execute/declarer-2.a68: Likewise.
            * algol68/execute/deprocedure-1.a68: Likewise.
            * algol68/execute/deprocedure-2.a68: Likewise.
            * algol68/execute/deref-1.a68: Likewise.
            * algol68/execute/deref-2.a68: Likewise.
            * algol68/execute/deref-3.a68: Likewise.
            * algol68/execute/deref-4.a68: Likewise.
            * algol68/execute/deref-5.a68: Likewise.
            * algol68/execute/deref-6.a68: Likewise.
            * algol68/execute/deref-7.a68: Likewise.
            * algol68/execute/deref-8.a68: Likewise.
            * algol68/execute/div-int-1.a68: Likewise.
            * algol68/execute/divab-real-1.a68: Likewise.
            * algol68/execute/elem-bits-1.a68: Likewise.
            * algol68/execute/elems-1.a68: Likewise.
            * algol68/execute/elems-2.a68: Likewise.
            * algol68/execute/entier-1.a68: Likewise.
            * algol68/execute/environment-enquiries-1.a68: Likewise.
            * algol68/execute/environment-enquiries-2.a68: Likewise.
            * algol68/execute/environment-enquiries-3.a68: Likewise.
            * algol68/execute/environment-enquiries-4.a68: Likewise.
            * algol68/execute/environment-enquiries-5.a68: Likewise.
            * algol68/execute/environment-enquiries-6.a68: Likewise.
            * algol68/execute/environment-enquiries-7.a68: Likewise.
            * algol68/execute/environment-enquiries-8.a68: Likewise.
            * algol68/execute/eq-bits-1.a68: Likewise.
            * algol68/execute/eq-char-char-1.a68: Likewise.
            * algol68/execute/eq-int-1.a68: Likewise.
            * algol68/execute/eq-string-1.a68: Likewise.
            * algol68/execute/eq-string-stride-1.a68: Likewise.
            * algol68/execute/execute.exp: Likewise.
            * algol68/execute/factorial-1.a68: Likewise.
            * algol68/execute/flat-assignation-1.a68: Likewise.
            * algol68/execute/flat-assignation-2.a68: Likewise.
            * algol68/execute/flex-1.a68: Likewise.
            * algol68/execute/flex-2.a68: Likewise.
            * algol68/execute/flex-3.a68: Likewise.
            * algol68/execute/flex-4.a68: Likewise.
            * algol68/execute/flex-5.a68: Likewise.
            * algol68/execute/formula-1.a68: Likewise.
            * algol68/execute/formula-2.a68: Likewise.
            * algol68/execute/fsize-1.a68: Likewise.
            * algol68/execute/ge-int-1.a68: Likewise.
            * algol68/execute/ge-string-stride-1.a68: Likewise.
            * algol68/execute/gen-flex-1.a68: Likewise.
            * algol68/execute/gen-heap-1.a68: Likewise.
            * algol68/execute/gen-heap-2.a68: Likewise.
            * algol68/execute/gen-heap-3.a68: Likewise.
            * algol68/execute/gen-heap-bool-1.a68: Likewise.
            * algol68/execute/gen-heap-int-1.a68: Likewise.
            * algol68/execute/gen-heap-real-1.a68: Likewise.
            * algol68/execute/gen-heap-struct-1.a68: Likewise.
            * algol68/execute/gen-heap-struct-2.a68: Likewise.
            * algol68/execute/gen-heap-struct-3.a68: Likewise.
            * algol68/execute/gen-loc-1.a68: Likewise.
            * algol68/execute/gen-loc-2.a68: Likewise.
            * algol68/execute/gen-loc-3.a68: Likewise.
            * algol68/execute/gen-loc-4.a68: Likewise.
            * algol68/execute/gen-multiple-1.a68: Likewise.
            * algol68/execute/gen-union-1.a68: Likewise.
            * algol68/execute/gen-union-2.a68: Likewise.
            * algol68/execute/gen-union-3.a68: Likewise.
            * algol68/execute/goto-1.a68: Likewise.
            * algol68/execute/goto-2.a68: Likewise.
            * algol68/execute/goto-3.a68: Likewise.
            * algol68/execute/goto-4.a68: Likewise.
            * algol68/execute/goto-5.a68: Likewise.
            * algol68/execute/gt-int-1.a68: Likewise.
            * algol68/execute/gt-string-stride-1.a68: Likewise.
            * algol68/execute/i-1.a68: Likewise.
            * algol68/execute/i-2.a68: Likewise.
            * algol68/execute/identification-1.a68: Likewise.
            * algol68/execute/identification-2.a68: Likewise.
            * algol68/execute/identity-declaration-1.a68: Likewise.
            * algol68/execute/identity-declaration-2.a68: Likewise.
            * algol68/execute/identity-declaration-3.a68: Likewise.
            * algol68/execute/identity-declaration-4.a68: Likewise.
            * algol68/execute/identity-declaration-5.a68: Likewise.
            * algol68/execute/identity-declaration-multiple-1.a68: Likewise.
            * algol68/execute/identity-declaration-multiple-2.a68: Likewise.
            * algol68/execute/identity-declaration-multiple-3.a68: Likewise.
            * algol68/execute/identity-declaration-multiple-5.a68: Likewise.
            * algol68/execute/identity-declaration-multiple-empty-1.a68: 
Likewise.
            * algol68/execute/identity-declaration-multiple-empty-2.a68: 
Likewise.
            * algol68/execute/identity-declaration-multiple-empty-3.a68: 
Likewise.
            * algol68/execute/identity-declaration-multiple-empty-4.a68: 
Likewise.
            * algol68/execute/identity-declaration-struct-1.a68: Likewise.
            * algol68/execute/infinity-1.a68: Likewise.
            * algol68/execute/le-ge-bits-1.a68: Likewise.
            * algol68/execute/le-int-1.a68: Likewise.
            * algol68/execute/le-string-stride-1.a68: Likewise.
            * algol68/execute/leng-shorten-bits-1.a68: Likewise.
            * algol68/execute/leng-shorten-ints-1.a68: Likewise.
            * algol68/execute/leng-shorten-reals-1.a68: Likewise.
            * algol68/execute/lengths-shorths-1.a68: Likewise.
            * algol68/execute/lisp-1.a68: Likewise.
            * algol68/execute/lisp-2.a68: Likewise.
            * algol68/execute/ln-1.a68: Likewise.
            * algol68/execute/log-1.a68: Likewise.
            * algol68/execute/loop-1.a68: Likewise.
            * algol68/execute/loop-10.a68: Likewise.
            * algol68/execute/loop-11.a68: Likewise.
            * algol68/execute/loop-12.a68: Likewise.
            * algol68/execute/loop-13.a68: Likewise.
            * algol68/execute/loop-14.a68: Likewise.
            * algol68/execute/loop-2.a68: Likewise.
            * algol68/execute/loop-3.a68: Likewise.
            * algol68/execute/loop-4.a68: Likewise.
            * algol68/execute/loop-5.a68: Likewise.
            * algol68/execute/loop-6.a68: Likewise.

Diff:
---
 gcc/testsuite/algol68/execute/abs-bits-1.a68       |   7 +
 gcc/testsuite/algol68/execute/abs-bool-1.a68       |   4 +
 gcc/testsuite/algol68/execute/abs-char-1.a68       |   3 +
 gcc/testsuite/algol68/execute/abs-int-1.a68        |  10 ++
 .../algol68/execute/abs-int-negative-1.a68         |   4 +
 .../algol68/execute/abs-int-negative-gnu-1.a68     |   4 +
 gcc/testsuite/algol68/execute/acos-1.a68           |   8 +
 gcc/testsuite/algol68/execute/affirm-int-1.a68     |  10 ++
 gcc/testsuite/algol68/execute/and-bits-1.a68       |  18 +++
 gcc/testsuite/algol68/execute/andf-1.a68           |   4 +
 gcc/testsuite/algol68/execute/ascription-1.a68     |  12 ++
 gcc/testsuite/algol68/execute/asin-1.a68           |   8 +
 gcc/testsuite/algol68/execute/assert-1.a68         |   3 +
 .../algol68/execute/assignation-char-1.a68         |   5 +
 .../algol68/execute/assignation-int-1.a68          |   5 +
 .../algol68/execute/assignation-int-2.a68          |   5 +
 .../algol68/execute/assignation-int-3.a68          |   6 +
 .../algol68/execute/assignation-int-4.a68          |   5 +
 .../algol68/execute/assignation-int-5.a68          |   6 +
 .../algol68/execute/assignation-multiple-1.a68     |   4 +
 .../algol68/execute/assignation-multiple-2.a68     |  15 ++
 .../algol68/execute/assignation-struct-1.a68       |   6 +
 .../algol68/execute/assignation-struct-2.a68       |   8 +
 gcc/testsuite/algol68/execute/atan-1.a68           |   8 +
 gcc/testsuite/algol68/execute/balancing-1.a68      |  12 ++
 gcc/testsuite/algol68/execute/balancing-rows-1.a68 |   4 +
 gcc/testsuite/algol68/execute/bin-1.a68            |   6 +
 gcc/testsuite/algol68/execute/bin-negative-1.a68   |   3 +
 .../algol68/execute/bin-negative-gnu-1.a68         |   3 +
 gcc/testsuite/algol68/execute/boolops-1.a68        |  18 +++
 gcc/testsuite/algol68/execute/call-1.a68           |  19 +++
 gcc/testsuite/algol68/execute/call-2.a68           |  21 +++
 gcc/testsuite/algol68/execute/case-clause-1.a68    |  10 ++
 gcc/testsuite/algol68/execute/case-clause-2.a68    |   8 +
 gcc/testsuite/algol68/execute/case-clause-3.a68    |   7 +
 gcc/testsuite/algol68/execute/case-clause-4.a68    |   5 +
 gcc/testsuite/algol68/execute/closed-clause-1.a68  |  10 ++
 gcc/testsuite/algol68/execute/closed-clause-2.a68  |   9 ++
 .../algol68/execute/collateral-clause-1.a68        |   4 +
 .../algol68/execute/collateral-clause-2.a68        |   9 ++
 .../algol68/execute/collateral-clause-3.a68        |  11 ++
 .../algol68/execute/collateral-clause-4.a68        |   3 +
 .../algol68/execute/collateral-clause-5.a68        |   5 +
 .../algol68/execute/collateral-clause-6.a68        |   8 +
 gcc/testsuite/algol68/execute/completer-1.a68      |   9 ++
 gcc/testsuite/algol68/execute/completer-10.a68     |   7 +
 gcc/testsuite/algol68/execute/completer-2.a68      |   7 +
 gcc/testsuite/algol68/execute/completer-3.a68      |   4 +
 gcc/testsuite/algol68/execute/completer-4.a68      |   4 +
 gcc/testsuite/algol68/execute/completer-5.a68      |   5 +
 gcc/testsuite/algol68/execute/completer-6.a68      |   5 +
 gcc/testsuite/algol68/execute/completer-7.a68      |   5 +
 gcc/testsuite/algol68/execute/completer-8.a68      |   5 +
 gcc/testsuite/algol68/execute/completer-9.a68      |   6 +
 gcc/testsuite/algol68/execute/cond-clause-1.a68    |   5 +
 gcc/testsuite/algol68/execute/cond-clause-2.a68    |   5 +
 gcc/testsuite/algol68/execute/cond-clause-3.a68    |   7 +
 gcc/testsuite/algol68/execute/cond-clause-4.a68    |   3 +
 gcc/testsuite/algol68/execute/cond-clause-5.a68    |   3 +
 gcc/testsuite/algol68/execute/cond-clause-6.a68    |  23 +++
 gcc/testsuite/algol68/execute/cond-clause-7.a68    |  23 +++
 gcc/testsuite/algol68/execute/cond-clause-8.a68    |  20 +++
 gcc/testsuite/algol68/execute/cond-clause-9.a68    |  23 +++
 .../algol68/execute/conformity-clause-1.a68        |  10 ++
 .../algol68/execute/conformity-clause-2.a68        |  11 ++
 .../algol68/execute/conformity-clause-3.a68        |  11 ++
 .../algol68/execute/conformity-clause-4.a68        |   7 +
 .../algol68/execute/conformity-clause-5.a68        |  14 ++
 .../algol68/execute/conformity-clause-6.a68        |   8 +
 .../algol68/execute/conformity-clause-7.a68        |   7 +
 .../algol68/execute/conformity-clause-8.a68        |  11 ++
 .../algol68/execute/conformity-clause-9.a68        |  10 ++
 gcc/testsuite/algol68/execute/conj-1.a68           |   9 ++
 gcc/testsuite/algol68/execute/cos-1.a68            |   8 +
 gcc/testsuite/algol68/execute/declarer-1.a68       |   9 ++
 gcc/testsuite/algol68/execute/declarer-2.a68       |   6 +
 gcc/testsuite/algol68/execute/deprocedure-1.a68    |   5 +
 gcc/testsuite/algol68/execute/deprocedure-2.a68    |   6 +
 gcc/testsuite/algol68/execute/deref-1.a68          |   5 +
 gcc/testsuite/algol68/execute/deref-2.a68          |   6 +
 gcc/testsuite/algol68/execute/deref-3.a68          |  11 ++
 gcc/testsuite/algol68/execute/deref-4.a68          |   8 +
 gcc/testsuite/algol68/execute/deref-5.a68          |  42 +++++
 gcc/testsuite/algol68/execute/deref-6.a68          |  48 ++++++
 gcc/testsuite/algol68/execute/deref-7.a68          |  48 ++++++
 gcc/testsuite/algol68/execute/deref-8.a68          |  53 +++++++
 gcc/testsuite/algol68/execute/div-int-1.a68        |   7 +
 gcc/testsuite/algol68/execute/divab-real-1.a68     |  11 ++
 gcc/testsuite/algol68/execute/elem-bits-1.a68      |  18 +++
 gcc/testsuite/algol68/execute/elems-1.a68          |   6 +
 gcc/testsuite/algol68/execute/elems-2.a68          |   7 +
 gcc/testsuite/algol68/execute/entier-1.a68         |   8 +
 .../algol68/execute/environment-enquiries-1.a68    |  10 ++
 .../algol68/execute/environment-enquiries-2.a68    |  12 ++
 .../algol68/execute/environment-enquiries-3.a68    |   9 ++
 .../algol68/execute/environment-enquiries-4.a68    |   7 +
 .../algol68/execute/environment-enquiries-5.a68    |   5 +
 .../algol68/execute/environment-enquiries-6.a68    |   7 +
 .../algol68/execute/environment-enquiries-7.a68    |  15 ++
 .../algol68/execute/environment-enquiries-8.a68    |   6 +
 gcc/testsuite/algol68/execute/eq-bits-1.a68        |  10 ++
 gcc/testsuite/algol68/execute/eq-char-char-1.a68   |   4 +
 gcc/testsuite/algol68/execute/eq-int-1.a68         |  10 ++
 gcc/testsuite/algol68/execute/eq-string-1.a68      |  16 ++
 .../algol68/execute/eq-string-stride-1.a68         |   6 +
 gcc/testsuite/algol68/execute/execute.exp          |  37 +++++
 gcc/testsuite/algol68/execute/factorial-1.a68      | 170 +++++++++++++++++++++
 .../algol68/execute/flat-assignation-1.a68         |   7 +
 .../algol68/execute/flat-assignation-2.a68         |   8 +
 gcc/testsuite/algol68/execute/flex-1.a68           |   5 +
 gcc/testsuite/algol68/execute/flex-2.a68           |   8 +
 gcc/testsuite/algol68/execute/flex-3.a68           |   7 +
 gcc/testsuite/algol68/execute/flex-4.a68           |   6 +
 gcc/testsuite/algol68/execute/flex-5.a68           |  12 ++
 gcc/testsuite/algol68/execute/formula-1.a68        |   9 ++
 gcc/testsuite/algol68/execute/formula-2.a68        |   7 +
 gcc/testsuite/algol68/execute/fsize-1.a68          |   2 +
 gcc/testsuite/algol68/execute/ge-int-1.a68         |  10 ++
 .../algol68/execute/ge-string-stride-1.a68         |   7 +
 gcc/testsuite/algol68/execute/gen-flex-1.a68       |  10 ++
 gcc/testsuite/algol68/execute/gen-heap-1.a68       |   6 +
 gcc/testsuite/algol68/execute/gen-heap-2.a68       |   6 +
 gcc/testsuite/algol68/execute/gen-heap-3.a68       |   5 +
 gcc/testsuite/algol68/execute/gen-heap-bool-1.a68  |   6 +
 gcc/testsuite/algol68/execute/gen-heap-int-1.a68   |   4 +
 gcc/testsuite/algol68/execute/gen-heap-real-1.a68  |   4 +
 .../algol68/execute/gen-heap-struct-1.a68          |   4 +
 .../algol68/execute/gen-heap-struct-2.a68          |   5 +
 .../algol68/execute/gen-heap-struct-3.a68          |   5 +
 gcc/testsuite/algol68/execute/gen-loc-1.a68        |   6 +
 gcc/testsuite/algol68/execute/gen-loc-2.a68        |   6 +
 gcc/testsuite/algol68/execute/gen-loc-3.a68        |   5 +
 gcc/testsuite/algol68/execute/gen-loc-4.a68        |   8 +
 gcc/testsuite/algol68/execute/gen-multiple-1.a68   |   5 +
 gcc/testsuite/algol68/execute/gen-union-1.a68      |  17 +++
 gcc/testsuite/algol68/execute/gen-union-2.a68      |  20 +++
 gcc/testsuite/algol68/execute/gen-union-3.a68      |  14 ++
 gcc/testsuite/algol68/execute/goto-1.a68           |   7 +
 gcc/testsuite/algol68/execute/goto-2.a68           |   5 +
 gcc/testsuite/algol68/execute/goto-3.a68           |   9 ++
 gcc/testsuite/algol68/execute/goto-4.a68           |   9 ++
 gcc/testsuite/algol68/execute/goto-5.a68           |  20 +++
 gcc/testsuite/algol68/execute/gt-int-1.a68         |  10 ++
 .../algol68/execute/gt-string-stride-1.a68         |   7 +
 gcc/testsuite/algol68/execute/i-1.a68              |   6 +
 gcc/testsuite/algol68/execute/i-2.a68              |   6 +
 gcc/testsuite/algol68/execute/identification-1.a68 |   6 +
 gcc/testsuite/algol68/execute/identification-2.a68 |  14 ++
 .../algol68/execute/identity-declaration-1.a68     |   6 +
 .../algol68/execute/identity-declaration-2.a68     |   6 +
 .../algol68/execute/identity-declaration-3.a68     |   6 +
 .../algol68/execute/identity-declaration-4.a68     |   5 +
 .../algol68/execute/identity-declaration-5.a68     |   5 +
 .../execute/identity-declaration-multiple-1.a68    |   4 +
 .../execute/identity-declaration-multiple-2.a68    |   4 +
 .../execute/identity-declaration-multiple-3.a68    |   6 +
 .../execute/identity-declaration-multiple-5.a68    |   4 +
 .../identity-declaration-multiple-empty-1.a68      |   6 +
 .../identity-declaration-multiple-empty-2.a68      |  12 ++
 .../identity-declaration-multiple-empty-3.a68      |   4 +
 .../identity-declaration-multiple-empty-4.a68      |   4 +
 .../execute/identity-declaration-struct-1.a68      |  10 ++
 gcc/testsuite/algol68/execute/infinity-1.a68       |   4 +
 gcc/testsuite/algol68/execute/le-ge-bits-1.a68     |  17 +++
 gcc/testsuite/algol68/execute/le-int-1.a68         |  10 ++
 .../algol68/execute/le-string-stride-1.a68         |   7 +
 .../algol68/execute/leng-shorten-bits-1.a68        |   7 +
 .../algol68/execute/leng-shorten-ints-1.a68        |  27 ++++
 .../algol68/execute/leng-shorten-reals-1.a68       |  17 +++
 .../algol68/execute/lengths-shorths-1.a68          |   8 +
 gcc/testsuite/algol68/execute/lisp-1.a68           |  25 +++
 gcc/testsuite/algol68/execute/lisp-2.a68           |  21 +++
 gcc/testsuite/algol68/execute/ln-1.a68             |   8 +
 gcc/testsuite/algol68/execute/log-1.a68            |   8 +
 gcc/testsuite/algol68/execute/loop-1.a68           |   6 +
 gcc/testsuite/algol68/execute/loop-10.a68          |   5 +
 gcc/testsuite/algol68/execute/loop-11.a68          |   6 +
 gcc/testsuite/algol68/execute/loop-12.a68          |   5 +
 gcc/testsuite/algol68/execute/loop-13.a68          |   6 +
 gcc/testsuite/algol68/execute/loop-14.a68          |   7 +
 gcc/testsuite/algol68/execute/loop-2.a68           |   7 +
 gcc/testsuite/algol68/execute/loop-3.a68           |  14 ++
 gcc/testsuite/algol68/execute/loop-4.a68           |  13 ++
 gcc/testsuite/algol68/execute/loop-5.a68           |   7 +
 gcc/testsuite/algol68/execute/loop-6.a68           |   7 +
 185 files changed, 1893 insertions(+)

diff --git a/gcc/testsuite/algol68/execute/abs-bits-1.a68 
b/gcc/testsuite/algol68/execute/abs-bits-1.a68
new file mode 100644
index 000000000000..bdb3a1bef52e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-bits-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# ABS for SIZETY BITS #
+BEGIN ASSERT (255 = ABS 16rff);
+      ASSERT (LONG 255 = ABS LONG 16rff);
+      ASSERT (LONG LONG 255 = ABS LONG LONG 16rff)
+      # XXX test ABS of negative numbers (extension).  #
+END
diff --git a/gcc/testsuite/algol68/execute/abs-bool-1.a68 
b/gcc/testsuite/algol68/execute/abs-bool-1.a68
new file mode 100644
index 000000000000..90ea0d685a34
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-bool-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (ABS TRUE /= 0);
+      ASSERT (ABS FALSE = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/abs-char-1.a68 
b/gcc/testsuite/algol68/execute/abs-char-1.a68
new file mode 100644
index 000000000000..124fb3d473ff
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-char-1.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (ABS "a" = 97)
+END
diff --git a/gcc/testsuite/algol68/execute/abs-int-1.a68 
b/gcc/testsuite/algol68/execute/abs-int-1.a68
new file mode 100644
index 000000000000..fa8125a1587b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-int-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (ABS 10 = 10);
+      ASSERT (ABS -10 = 10);
+      ASSERT (ABS SHORT 10 = SHORT 10);
+      ASSERT (ABS - SHORT 10 = SHORT 10);
+      ASSERT (ABS - SHORT SHORT 10 = SHORT SHORT 10);
+      ASSERT (ABS LONG 10 = LONG 10);
+      ASSERT (ABS - LONG 10 = LONG 10);
+      ASSERT (ABS - LONG LONG 10 = LONG LONG 10)
+END
diff --git a/gcc/testsuite/algol68/execute/abs-int-negative-1.a68 
b/gcc/testsuite/algol68/execute/abs-int-negative-1.a68
new file mode 100644
index 000000000000..77973ad220f2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-int-negative-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper -std=algol68" }  #
+BEGIN SHORT SHORT BITS b = BIN - SHORT SHORT 2;
+      ASSERT (ABS b = SHORT SHORT INT (SKIP))
+END
diff --git a/gcc/testsuite/algol68/execute/abs-int-negative-gnu-1.a68 
b/gcc/testsuite/algol68/execute/abs-int-negative-gnu-1.a68
new file mode 100644
index 000000000000..4afe25679e01
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/abs-int-negative-gnu-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper -std=gnu68" }  #
+BEGIN SHORT SHORT BITS b = BIN - SHORT SHORT 2;
+      ASSERT (ABS b = - SHORT SHORT 2)
+END
diff --git a/gcc/testsuite/algol68/execute/acos-1.a68 
b/gcc/testsuite/algol68/execute/acos-1.a68
new file mode 100644
index 000000000000..6a985cc8a235
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/acos-1.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 1.0;
+      LONG REAL rr = LONG 45.0;
+      LONG LONG REAL rrr = LONG LONG 60.0;
+      ASSERT (arccos (r) = 0.0);
+      long arccos (rr);
+      long long arccos (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/affirm-int-1.a68 
b/gcc/testsuite/algol68/execute/affirm-int-1.a68
new file mode 100644
index 000000000000..4cd065fa2358
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/affirm-int-1.a68
@@ -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/and-bits-1.a68 
b/gcc/testsuite/algol68/execute/and-bits-1.a68
new file mode 100644
index 000000000000..e6530bcdfb01
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/and-bits-1.a68
@@ -0,0 +1,18 @@
+# { dg-options "-fstropping=upper" }  #
+# AND for SIZETY BITS.  #
+BEGIN BITS b = 16r0f0f0;
+      ASSERT ((b AND 16r0f0f) = 16r0);
+      ASSERT ((b AND 16r00ff) = 16rf0);
+      LONG BITS bb = LONG 16r0f0f0;
+      ASSERT ((bb AND LONG 16r0f0f) = LONG 16r0);
+      ASSERT ((bb AND LONG 16r00ff) = LONG 16rf0);
+      LONG LONG BITS bbb = LONG LONG 16r0f0f0;
+      ASSERT ((bbb AND LONG LONG 16r0f0f) = LONG LONG 16r0);
+      ASSERT ((bbb AND LONG LONG 16r00ff) = LONG LONG 16rf0);
+      SHORT BITS ss = SHORT 16r0f0f0;
+      ASSERT ((ss AND SHORT 16r0f0f) = SHORT 16r0);
+      ASSERT ((ss AND SHORT 16r00ff) = SHORT 16rf0);
+      SHORT SHORT BITS sss = SHORT SHORT 16r0f0f0;
+      ASSERT ((sss AND SHORT SHORT 16r0f0f) = SHORT SHORT 16r0);
+      ASSERT ((sss AND SHORT SHORT 16r00ff) = SHORT SHORT 16rf0)
+END
diff --git a/gcc/testsuite/algol68/execute/andf-1.a68 
b/gcc/testsuite/algol68/execute/andf-1.a68
new file mode 100644
index 000000000000..72667a653bd5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/andf-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      ASSERT (i /= 0 ANDTH i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/ascription-1.a68 
b/gcc/testsuite/algol68/execute/ascription-1.a68
new file mode 100644
index 000000000000..f6744e322f92
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/ascription-1.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+# Make sure structs are copied when ascribed.  #
+BEGIN MODE BAR = STRUCT (INT j, REAL r);
+      MODE FOO = STRUCT (INT i, BAR bar);
+
+      FOO f1 := (10, (20, 3.14));
+      FOO f2 = f1;
+
+      j OF bar OF f1 := 200;
+      ASSERT (j OF bar OF f1 = 200);
+      ASSERT (j OF bar OF f2 = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/asin-1.a68 
b/gcc/testsuite/algol68/execute/asin-1.a68
new file mode 100644
index 000000000000..114518edfa2c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/asin-1.a68
@@ -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 (arcsin (r) = 0.0);
+      long arcsin (rr);
+      long long arcsin (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/assert-1.a68 
b/gcc/testsuite/algol68/execute/assert-1.a68
new file mode 100644
index 000000000000..2ed6ea40e7e6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assert-1.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (TRUE)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-char-1.a68 
b/gcc/testsuite/algol68/execute/assignation-char-1.a68
new file mode 100644
index 000000000000..5558ccc140d9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-char-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN CHAR c;
+      c := "x";
+      ASSERT (c = "x")
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-int-1.a68 
b/gcc/testsuite/algol68/execute/assignation-int-1.a68
new file mode 100644
index 000000000000..139d7436ebd6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-int-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i;
+      i := 20;
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-int-2.a68 
b/gcc/testsuite/algol68/execute/assignation-int-2.a68
new file mode 100644
index 000000000000..cfd384076316
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-int-2.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN x := 100;
+      INT x;
+      ASSERT (x = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-int-3.a68 
b/gcc/testsuite/algol68/execute/assignation-int-3.a68
new file mode 100644
index 000000000000..9b60f7e0a36a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-int-3.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF INT j = LOC INT;
+      INT i;
+      i := j := 20;
+      ASSERT (i + j = 40)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-int-4.a68 
b/gcc/testsuite/algol68/execute/assignation-int-4.a68
new file mode 100644
index 000000000000..2aeb35b11477
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-int-4.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF INT xx;
+      INT x := 10;
+      ASSERT ((xx := (x)) = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-int-5.a68 
b/gcc/testsuite/algol68/execute/assignation-int-5.a68
new file mode 100644
index 000000000000..2b67b21fae2b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-int-5.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := x;
+      x := 20;
+      ASSERT ((xx := (INT j; x)) = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-multiple-1.a68 
b/gcc/testsuite/algol68/execute/assignation-multiple-1.a68
new file mode 100644
index 000000000000..cf8d78020ef5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-multiple-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRUCT ([2:3]INT m, [1:5]REAL g) s;
+      g OF s:= (1.0, 2.0, 3.0, 4.0, 5.0)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-multiple-2.a68 
b/gcc/testsuite/algol68/execute/assignation-multiple-2.a68
new file mode 100644
index 000000000000..22ff7e119427
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-multiple-2.a68
@@ -0,0 +1,15 @@
+begin [5]struct(char i, real r) foo;
+
+      { The stride in the single dimension of the multiple resulting
+        from the selection is not the size of a 'char'.  }
+      i of foo := ("a","b","c","d","e");
+      puts ((i of foo) + "'n");
+      { Via indexing then selection.  }
+      assert (i of foo[1] = "a");
+      assert (i of foo[2] = "b");
+      assert (i of foo[3] = "c");
+      assert (i of foo[4] = "d");
+      assert (i of foo[5] = "e");
+      { Via selection of multiple.  }
+      assert (i of foo = "abcde");
+end
diff --git a/gcc/testsuite/algol68/execute/assignation-struct-1.a68 
b/gcc/testsuite/algol68/execute/assignation-struct-1.a68
new file mode 100644
index 000000000000..a2d661b18378
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-struct-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT one, two, three);
+      NODE top;
+      top := (10,20,30);
+      ASSERT (two OF top = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/assignation-struct-2.a68 
b/gcc/testsuite/algol68/execute/assignation-struct-2.a68
new file mode 100644
index 000000000000..61734cc0db65
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/assignation-struct-2.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Struct containing a multiple, which must be copied when
+  the struct value is assigned.  #
+BEGIN MODE FOO = STRUCT (STRING s, INT i);
+      FOO f1;
+      f1 := ("foo", 10);
+      ASSERT (i OF f1 = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/atan-1.a68 
b/gcc/testsuite/algol68/execute/atan-1.a68
new file mode 100644
index 000000000000..bc710c5cdfd8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/atan-1.a68
@@ -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 (arctan (r) = 0.0);
+      long arctan (rr);
+      long long arctan (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/balancing-1.a68 
b/gcc/testsuite/algol68/execute/balancing-1.a68
new file mode 100644
index 000000000000..418b0e4efb9e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/balancing-1.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL x, y;
+      REF REAL xx, yy;
+      xx := yy := x;
+
+      ASSERT (xx :=: x);
+      ASSERT (x :=: xx);
+      ASSERT (xx :/=: yy);
+      ASSERT (REF REAL (xx) :=: yy);
+      ASSERT (xx :=: REF REAL (yy));
+      ASSERT (REF REAL (xx) :=: REF REAL (yy))
+END
diff --git a/gcc/testsuite/algol68/execute/balancing-rows-1.a68 
b/gcc/testsuite/algol68/execute/balancing-rows-1.a68
new file mode 100644
index 000000000000..1f69d47259a9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/balancing-rows-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (UPB IF FALSE THEN []INT (1) ELSE [,]REAL (1) FI = 1);
+      ASSERT (2 UPB CASE 2 IN []INT (1), [,]REAL (1) ESAC = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/bin-1.a68 
b/gcc/testsuite/algol68/execute/bin-1.a68
new file mode 100644
index 000000000000..4fb095fb5dd8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/bin-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# BIN for SIZETY INTs #
+BEGIN ASSERT (BIN 255 = 16rff);
+      ASSERT (BIN LONG 255 = LONG 16rff);
+      ASSERT (BIN LONG LONG 255 = LONG LONG 16rff)
+END
diff --git a/gcc/testsuite/algol68/execute/bin-negative-1.a68 
b/gcc/testsuite/algol68/execute/bin-negative-1.a68
new file mode 100644
index 000000000000..97c2cf000c3b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/bin-negative-1.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper -std=algol68" }  #
+BEGIN ASSERT (BIN - SHORT SHORT 2 = SHORT SHORT 2r0)
+END
diff --git a/gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68 
b/gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
new file mode 100644
index 000000000000..41d95533f3c5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/bin-negative-gnu-1.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper -std=gnu68" }  #
+BEGIN ASSERT (BIN - SHORT SHORT 2 = SHORT SHORT 2r11111110)
+END
diff --git a/gcc/testsuite/algol68/execute/boolops-1.a68 
b/gcc/testsuite/algol68/execute/boolops-1.a68
new file mode 100644
index 000000000000..82600fc2f9a6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/boolops-1.a68
@@ -0,0 +1,18 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN BOOL t := TRUE;
+      BOOL f := FALSE;
+      ASSERT (NOT t = FALSE);
+      ASSERT (~t = FALSE);
+      ASSERT ((t AND t) = TRUE);
+      ASSERT ((t AND f) = FALSE);
+      ASSERT ((f AND f) = FALSE);
+      ASSERT ((f AND t) = FALSE);
+      ASSERT ((t OR t) = TRUE);
+      ASSERT ((t OR f) = TRUE);
+      ASSERT ((f OR f) = FALSE);
+      ASSERT ((f OR t) = TRUE);
+      ASSERT ((t XOR t) = FALSE);
+      ASSERT ((t XOR f) = TRUE);
+      ASSERT ((f XOR f) = FALSE);
+      ASSERT ((f XOR t) = TRUE)
+END
diff --git a/gcc/testsuite/algol68/execute/call-1.a68 
b/gcc/testsuite/algol68/execute/call-1.a68
new file mode 100644
index 000000000000..f77113dcc464
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/call-1.a68
@@ -0,0 +1,19 @@
+# { dg-options "-fstropping=upper" }  #
+# Calling a procedure that gets a row of united values.  #
+BEGIN INT num ints := 0, num reals := 0, num strings := 0;
+      PROC foo = ([]UNION(INT,REAL,STRING) d) VOID:
+      BEGIN FOR i TO UPB d
+            DO CASE d[i]
+               IN (STRING): num strings +:= 1,
+                  (INT): num ints +:= 1,
+                  (REAL): num reals +:= 1
+               ESAC
+            OD
+      END;
+      foo (());
+      foo (10);
+      ASSERT (num ints = 1 AND num reals = 0 AND num strings = 0);
+      num ints := 0;
+      foo (("baz", 1, 3.14, 2, 0.0, "foo"));
+      ASSERT (num ints = 2 AND num reals = 2 AND num strings = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/call-2.a68 
b/gcc/testsuite/algol68/execute/call-2.a68
new file mode 100644
index 000000000000..21a6b252028a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/call-2.a68
@@ -0,0 +1,21 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT control := 0;
+      PROC set control = (PROC(INT)VOID p) VOID: p (100);
+      PROC setter = (INT i) VOID: control := i;
+      PROC(INT)VOID setter 2 = (INT i) VOID: control := i + 1;
+      PROC(INT)VOID setter 3 := setter 2;
+      PROC(INT)VOID setter 4 := (INT i) VOID: control := i + 2;
+      REF PROC(INT)VOID setter 5 := setter 4;
+      set control (setter);
+      ASSERT (control = 100);
+      set control (setter 2);
+      ASSERT (control = 101);
+      control := 0;
+      set control (setter 3);
+      ASSERT (control = 101);
+      set control (setter 4);
+      ASSERT (control = 102);
+      control := 0;
+      set control (setter 5);
+      ASSERT (control = 102)
+END
diff --git a/gcc/testsuite/algol68/execute/case-clause-1.a68 
b/gcc/testsuite/algol68/execute/case-clause-1.a68
new file mode 100644
index 000000000000..71566edf9154
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/case-clause-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT j := 1;
+      ASSERT ((j|10,20,30|40) = 10);
+      j := 2;
+      ASSERT ((j|10,20,30|40) = 20);
+      j := 3;
+      ASSERT ((j|10,20,30|40) = 30);
+      j := 100;
+      ASSERT ((j|10,20,30|40) = 40)
+END
diff --git a/gcc/testsuite/algol68/execute/case-clause-2.a68 
b/gcc/testsuite/algol68/execute/case-clause-2.a68
new file mode 100644
index 000000000000..971bdb56207a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/case-clause-2.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 2;
+      ASSERT (CASE INT x = 10; i
+              IN x + 1,
+                 x + 2,
+                 x + 3
+              ESAC = 12)
+END
diff --git a/gcc/testsuite/algol68/execute/case-clause-3.a68 
b/gcc/testsuite/algol68/execute/case-clause-3.a68
new file mode 100644
index 000000000000..3355cefc080f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/case-clause-3.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT days, INT month = 2, year = 2024;
+      days := CASE month
+              IN 31, (year MOD 4 = 0 AND year MOD 100 /= 0 OR year MOD 400 = 0 
| 29 | 28),
+                 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ESAC;
+      ASSERT (days = 29)
+END
diff --git a/gcc/testsuite/algol68/execute/case-clause-4.a68 
b/gcc/testsuite/algol68/execute/case-clause-4.a68
new file mode 100644
index 000000000000..cd69069fa84f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/case-clause-4.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT day = 3;
+      STRING day name = (day | "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", 
"FRIDAY", "SATURDAY", "SUNDAY");
+      ASSERT (day name[1] = "W")
+END
diff --git a/gcc/testsuite/algol68/execute/closed-clause-1.a68 
b/gcc/testsuite/algol68/execute/closed-clause-1.a68
new file mode 100644
index 000000000000..d7602e1ae86b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/closed-clause-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL pie, my small real := 0.001;
+      PROC my sqrt = (REAL r) REAL: r;
+      BEGIN REAL w := 0, INT i := 1, REAL z = my sqrt (my small real / 2);
+      loop: w := w + 2 / (i * (i + 2));
+            i := i + 4;
+            IF 1/i > z THEN GO TO loop FI;
+            pie := 4 * w
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/closed-clause-2.a68 
b/gcc/testsuite/algol68/execute/closed-clause-2.a68
new file mode 100644
index 000000000000..c6acec88ebdd
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/closed-clause-2.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL my small real := 0.001;
+      PROC my sqrt = (REAL r) REAL: r;
+      REAL res = 4 * (REAL w := 0, INT i := 1; REAL z = my sqrt (my small real 
/ 2);
+                      loop: w := w + 2/(i * (i + 2)); i := i + 4;
+                      IF 1/i > z THEN loop FI;
+                      w);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-1.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-1.a68
new file mode 100644
index 000000000000..d467a424aa2a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      (i, i + 1, i + 2)
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-2.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-2.a68
new file mode 100644
index 000000000000..8d9aa6eeb74c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-2.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      (
+         BEGIN
+            (i + 1, i +:= 1, i + 2)
+         END
+      );
+      ASSERT (i = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-3.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-3.a68
new file mode 100644
index 000000000000..9af00e7c2db4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-3.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10;
+      (
+         i +:= 1;
+         BEGIN
+            (i + 1, (i +:= 1, i + 10, i + 11, SKIP), i + 2)
+         END;
+         i +:= i
+      );
+      ASSERT (i = 24)
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-4.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-4.a68
new file mode 100644
index 000000000000..2e64fb1787e3
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-4.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN (SKIP,SKIP)
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-5.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-5.a68
new file mode 100644
index 000000000000..c1375a96677a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-5.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x, y, z;
+      (x := 1, y := 2, z := 3);
+      ASSERT (x = 1 AND y = 2 AND z = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/collateral-clause-6.a68 
b/gcc/testsuite/algol68/execute/collateral-clause-6.a68
new file mode 100644
index 000000000000..57599afb20e5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/collateral-clause-6.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i;
+      PROC side = INT: (i := 1; i := 2; i);
+      PROC add = (INT ii, INT jj) INT: ii + jj;
+      INT res = add (side, side);
+      # can be 3 or 4 due to collateral evaluation of arguments.  #
+      ASSERT (res = 3 OR res = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-1.a68 
b/gcc/testsuite/algol68/execute/completer-1.a68
new file mode 100644
index 000000000000..e3b488a7dd0b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-1.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i;
+      BEGIN (i := 20 EXIT
+cont:        i := 30
+            );
+            i +:= 1
+      END;
+      ASSERT (i = 21)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-10.a68 
b/gcc/testsuite/algol68/execute/completer-10.a68
new file mode 100644
index 000000000000..18d4f937cf3a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-10.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 20;
+      REF INT xx := x;
+      REF REF INT xxx;
+      REF INT i := (x := 10; xxx := xx EXIT foo: xxx EXIT bar: xxx := xx);
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-2.a68 
b/gcc/testsuite/algol68/execute/completer-2.a68
new file mode 100644
index 000000000000..fac329ab4bfd
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-2.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = (foo;
+               10 EXIT
+foo:           20 EXIT
+bar:           30);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-3.a68 
b/gcc/testsuite/algol68/execute/completer-3.a68
new file mode 100644
index 000000000000..6514f2ddc60d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-3.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = ((((foo; 10 EXIT foo: 20 EXIT bar: 30))));
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-4.a68 
b/gcc/testsuite/algol68/execute/completer-4.a68
new file mode 100644
index 000000000000..1291e733d730
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-4.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := (foo; 10 EXIT foo: 20 EXIT bar: 30);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-5.a68 
b/gcc/testsuite/algol68/execute/completer-5.a68
new file mode 100644
index 000000000000..f6bc6f42719b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-5.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x;
+      REF INT i := (foo; x := 10 EXIT foo: x := 20 EXIT bar: x := 30);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-6.a68 
b/gcc/testsuite/algol68/execute/completer-6.a68
new file mode 100644
index 000000000000..aaf512f4babd
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-6.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 20;
+      REF INT i := (foo; x := 10 EXIT foo: x EXIT bar: x := 30);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-7.a68 
b/gcc/testsuite/algol68/execute/completer-7.a68
new file mode 100644
index 000000000000..9ef0e27f6744
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-7.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 20;
+      REF INT i := (x := 10 EXIT foo: x EXIT bar: x := 30);
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-8.a68 
b/gcc/testsuite/algol68/execute/completer-8.a68
new file mode 100644
index 000000000000..b73fd13f4c32
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-8.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 20;
+      REF INT i := (x EXIT foo: x EXIT bar: x := 30);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/completer-9.a68 
b/gcc/testsuite/algol68/execute/completer-9.a68
new file mode 100644
index 000000000000..b84f01039816
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/completer-9.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 20;
+      REF INT xx := x;
+      REF INT i := (xx EXIT foo: xx EXIT bar: xx := x);
+      ASSERT (i = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-1.a68 
b/gcc/testsuite/algol68/execute/cond-clause-1.a68
new file mode 100644
index 000000000000..059bb8a61179
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10, x;
+      IF i > 5 THEN x := i FI;
+      ASSERT (x = i)
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-2.a68 
b/gcc/testsuite/algol68/execute/cond-clause-2.a68
new file mode 100644
index 000000000000..f8e5d5f03710
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-2.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 10, x;
+      IF i < 5 THEN x = i FI;
+      ASSERT (x /= i)
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-3.a68 
b/gcc/testsuite/algol68/execute/cond-clause-3.a68
new file mode 100644
index 000000000000..4e9c685c55fa
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-3.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 5;
+      IF i = 5
+      THEN 0
+      ELSE ASSERT (FALSE); 1
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-4.a68 
b/gcc/testsuite/algol68/execute/cond-clause-4.a68
new file mode 100644
index 000000000000..0e650414fb07
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-4.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+# Declarations in enquiry clause.  #
+(INT i; i := 3 ; i := 2; i /= i | ASSERT (FALSE); 1 | 0)
diff --git a/gcc/testsuite/algol68/execute/cond-clause-5.a68 
b/gcc/testsuite/algol68/execute/cond-clause-5.a68
new file mode 100644
index 000000000000..2164c75dc81a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-5.a68
@@ -0,0 +1,3 @@
+# { dg-options "-fstropping=upper" }  #
+# Closed clauses in enquiry clause.  #
+((INT i; (i := 3 ; i := 2); ((i /= i))) | ASSERT (FALSE); 1 | 0)
diff --git a/gcc/testsuite/algol68/execute/cond-clause-6.a68 
b/gcc/testsuite/algol68/execute/cond-clause-6.a68
new file mode 100644
index 000000000000..39b4bda31a1f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-6.a68
@@ -0,0 +1,23 @@
+# { dg-options "-fstropping=upper" }  #
+# Nested conditional clauses  #
+BEGIN
+   INT i = 10;
+   IF i > 5 THEN
+      IF i < 15 THEN
+         IF i > 11 THEN
+            ASSERT (FALSE);
+            1
+         ELSE
+            0
+         FI
+      FI
+   ELSE
+      IF i > 100 THEN
+         ASSERT (FALSE);
+         1
+      ELSE
+         ASSERT (FALSE);
+         1
+      FI
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-7.a68 
b/gcc/testsuite/algol68/execute/cond-clause-7.a68
new file mode 100644
index 000000000000..3a5af2bdbb04
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-7.a68
@@ -0,0 +1,23 @@
+# { dg-options "-fstropping=upper" }  #
+# Nested conditional clauses  #
+BEGIN
+   INT i = 12;
+   IF i > 5 THEN
+      IF i < 15 THEN
+         IF i > 11 THEN
+            0
+         ELSE
+            ASSERT (FALSE);
+            1
+         FI
+      FI
+   ELSE
+      IF i > 100 THEN
+         ASSERT (FALSE);
+         1
+      ELSE
+         ASSERT (FALSE);
+         1
+      FI
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-8.a68 
b/gcc/testsuite/algol68/execute/cond-clause-8.a68
new file mode 100644
index 000000000000..0b3ca04fccba
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-8.a68
@@ -0,0 +1,20 @@
+# { dg-options "-fstropping=upper" }  #
+# ELIF  #
+BEGIN
+   INT i = 12;
+   IF i > 20 THEN
+      1
+   ELIF i > 5 THEN
+      BEGIN
+         IF FALSE THEN
+            ASSERT (FALSE);
+            1
+         ELSE
+            0
+         FI
+      END
+   ELIF i < 10 THEN
+      ASSERT (FALSE);
+      1
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/cond-clause-9.a68 
b/gcc/testsuite/algol68/execute/cond-clause-9.a68
new file mode 100644
index 000000000000..d0f70e883025
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cond-clause-9.a68
@@ -0,0 +1,23 @@
+# { dg-options "-fstropping=upper" }  #
+# ELIF with ELSE #
+BEGIN
+   INT i = 12;
+   IF i > 20 THEN
+      1
+   ELIF i > 12 THEN
+      BEGIN
+         IF FALSE THEN
+            ASSERT (FALSE);
+            1
+         ELSE
+            ASSERT (FALSE);
+            1
+         FI
+      END
+   ELIF i < 10 THEN
+      ASSERT (FALSE);
+      1
+   ELSE
+      0
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-1.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-1.a68
new file mode 100644
index 000000000000..d34b7cfeabf5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE DATUM = UNION(INT,REAL,CHAR);
+      DATUM datum := 10;
+      INT i = CASE datum
+              IN (REAL): 2,
+                 (INT i): i + 1,
+                 (CHAR): 3
+              ESAC;
+      ASSERT (i = 11)
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-2.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-2.a68
new file mode 100644
index 000000000000..bfa28bba3d75
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-2.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE DATUM = UNION(INT,REAL,CHAR);
+      DATUM datum := "X";
+      INT i = CASE datum
+              IN (REAL): 2,
+                 (INT val): val + 1
+              OUT INT x = 100;
+                  x + 10
+              ESAC;
+      ASSERT (i = 110)
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-3.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-3.a68
new file mode 100644
index 000000000000..d0703de0c8c7
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-3.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE DATUM = UNION(INT,REAL,CHAR);
+      DATUM datum := 20;
+      INT i = CASE INT i = 10; datum
+              IN (REAL): 2,
+                 (INT val): val + i
+              OUT INT x = 100;
+                  x + 10
+              ESAC;
+      ASSERT (i = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-4.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-4.a68
new file mode 100644
index 000000000000..2cac20d50830
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-4.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []UNION(INT,STRING,REAL) datum = (10, 3.14, "foo", 200);
+      ASSERT (CASE datum[1] IN (INT): 100 ESAC = 100);
+      ASSERT (CASE datum[2] IN (REAL): 200 ESAC = 200);
+      ASSERT (CASE datum[3] IN (STRING): 300 ESAC = 300);
+      ASSERT (CASE datum[4] IN (INT): 400 ESAC = 400)
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-5.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-5.a68
new file mode 100644
index 000000000000..eb6f41ea22e2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-5.a68
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION(CHAR,BOOL,INT,REAL) cbira := "X";
+      IF CASE cbira
+         IN (BOOL b): b,
+            (INT i): i > 0,
+            (REAL r): r > 0
+         OUT FALSE
+         ESAC
+      THEN # We get here if cbira was not a CHAR and was otherwise
+             TRUE or >0, as the case may be.
+           #
+         ASSERT (FALSE)
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-6.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-6.a68
new file mode 100644
index 000000000000..b3d3d6cf329e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-6.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION (CHAR,BOOL,REAL) cbra = 3.14, UNION (INT,REAL) ira = 10;
+      IF (cbra | (CHAR): FALSE, (BOOL b): b
+          |: ira | (INT i): i > 0, (REAL r): r > 0)
+      THEN SKIP
+      ELSE ASSERT (FALSE)
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-7.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-7.a68
new file mode 100644
index 000000000000..18122a3dd70c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-7.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION (CHAR,BOOL,REAL) cbra = 3.14, UNION (INT,REAL) ira = -10;
+      IF (cbra | (CHAR): FALSE, (BOOL b): b
+          |: ira | (INT i): i > 0, (REAL r): r > 0)
+      THEN ASSERT (FALSE)
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-8.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-8.a68
new file mode 100644
index 000000000000..2da55f9abdfe
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-8.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE JORL = STRUCT (UNION(INT,REAL) i, REF JORL next);
+      REF JORL p := HEAP JORL := (10, HEAP JORL := (20.0, NIL));
+      p := HEAP JORL := (30, p);
+      INT num ints := 0, num reals := 0;
+      WHILE REF JORL (p) ISNT NIL
+      DO CASE i OF p IN (INT): num ints +:= 1, (REAL): num reals +:= 1 ESAC;
+         p := next OF p
+      OD;
+      ASSERT (num ints = 2 AND num reals = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/conformity-clause-9.a68 
b/gcc/testsuite/algol68/execute/conformity-clause-9.a68
new file mode 100644
index 000000000000..55f1fc3eb880
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conformity-clause-9.a68
@@ -0,0 +1,10 @@
+begin union (int, bool, string) foo = 666;
+      case foo
+      in (union(int,string) bar):
+            case bar
+            in (int i): assert (i = 666),
+               (string s): assert (false)
+            esac,
+         (bool baz): assert (false)
+      esac
+end
diff --git a/gcc/testsuite/algol68/execute/conj-1.a68 
b/gcc/testsuite/algol68/execute/conj-1.a68
new file mode 100644
index 000000000000..1954d38bf1d0
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/conj-1.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN COMPL z = 4.0I5.0;
+      CONJ z;
+      LONG COMPL zz = LONG 4.0 I LONG 6.0;
+      CONJ zz;
+      LONG LONG COMPL zzz = LONG LONG 4.0 I LONG LONG 7.0;
+      CONJ zzz;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/cos-1.a68 
b/gcc/testsuite/algol68/execute/cos-1.a68
new file mode 100644
index 000000000000..e6b0f69279ac
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/cos-1.a68
@@ -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 (cos (r) = 1.0);
+      long cos (rr);
+      long long cos (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/declarer-1.a68 
b/gcc/testsuite/algol68/execute/declarer-1.a68
new file mode 100644
index 000000000000..61af0816c83c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/declarer-1.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# Tests a jump out of the elaboration of a declarer.  #
+BEGIN STRING month = CASE 13
+                     IN "Jan", "Feb","March","April","May","June",
+                       "July","Aug","Sept", "Oct",  "Nov","Dec",
+                        stop
+                     ESAC;
+      ASSERT (FALSE)
+END
diff --git a/gcc/testsuite/algol68/execute/declarer-2.a68 
b/gcc/testsuite/algol68/execute/declarer-2.a68
new file mode 100644
index 000000000000..b474e3e516e9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/declarer-2.a68
@@ -0,0 +1,6 @@
+begin int n := 1;
+      { The actual-declarer below should be
+        elaborated only once.  }
+      [1: n +:= 1]real a, b;
+      assert (n = 2)
+end
diff --git a/gcc/testsuite/algol68/execute/deprocedure-1.a68 
b/gcc/testsuite/algol68/execute/deprocedure-1.a68
new file mode 100644
index 000000000000..17834f481094
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deprocedure-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x = 100;
+      PROC foo = INT: (INT i = 10, j = 20; PROC bar = INT: 100; i + j + bar);
+      ASSERT (foo = 130)
+END
diff --git a/gcc/testsuite/algol68/execute/deprocedure-2.a68 
b/gcc/testsuite/algol68/execute/deprocedure-2.a68
new file mode 100644
index 000000000000..1f501cf7ab21
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deprocedure-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Procedure variables.  #
+BEGIN INT x = 100;
+      PROC foo := INT: (INT i = 10, j = 20; PROC bar := INT: 100; i + j + bar);
+      ASSERT (foo = 130)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-1.a68 
b/gcc/testsuite/algol68/execute/deref-1.a68
new file mode 100644
index 000000000000..5bb4d5d373ab
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      INT res := (REF INT xx := x; xx);
+      ASSERT (res = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-2.a68 
b/gcc/testsuite/algol68/execute/deref-2.a68
new file mode 100644
index 000000000000..d49dc4a6987d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := x;
+      x := 20;
+      ASSERT (xx = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-3.a68 
b/gcc/testsuite/algol68/execute/deref-3.a68
new file mode 100644
index 000000000000..8c077e079bad
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-3.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      INT y := 20;
+      REF INT xx := x;
+      CO This makes xx to refer to y
+         REF REF INT := REF INT
+      CO
+      xx := y;
+      y := 30;
+      ASSERT (xx = 30)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-4.a68 
b/gcc/testsuite/algol68/execute/deref-4.a68
new file mode 100644
index 000000000000..59639fd86120
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-4.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      INT y := 20;
+      REF INT xx := x;
+      # This sets x to the current value of y #
+      REF INT (xx) := y;
+      ASSERT (x = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-5.a68 
b/gcc/testsuite/algol68/execute/deref-5.a68
new file mode 100644
index 000000000000..804947f3dd2c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-5.a68
@@ -0,0 +1,42 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx := x;
+      REF REF INT xxx := xx;
+      ASSERT (x = 10);
+      ASSERT (xx = 10);
+      ASSERT (xxx = 10);
+      ASSERT ((x) = 10);
+      ASSERT ((xx) = 10);
+      ASSERT ((xxx) = 10);
+      ASSERT (x + 1 = 11);
+      ASSERT (xx + 1 = 11);
+      ASSERT (xxx + 1 = 11);
+      ASSERT ((x + 1) = 11);
+      ASSERT ((xx + 1) = 11);
+      ASSERT ((xxx + 1) = 11);
+      ASSERT ((x := x) = 10);
+      ASSERT ((xx := x) = 10);
+      ASSERT ((xxx := xx) = 10);
+      ASSERT ((x := x) + 1 = 11);
+      ASSERT ((xx := x) + 1 = 11);
+      ASSERT ((xxx := xx) + 1 = 11);
+      x := 20;
+      ASSERT (x = 20);
+      ASSERT (xx = 20);
+      ASSERT (xxx = 20);
+      ASSERT ((x) = 20);
+      ASSERT ((xx) = 20);
+      ASSERT ((xxx) = 20);
+      ASSERT (x + 1 = 21);
+      ASSERT (xx + 1 = 21);
+      ASSERT (xxx + 1 = 21);
+      ASSERT ((x + 1) = 21);
+      ASSERT ((xx + 1) = 21);
+      ASSERT ((xxx + 1) = 21);
+      ASSERT ((x := x) = 20);
+      ASSERT ((xx := x) = 20);
+      ASSERT ((xxx := xx) = 20);
+      ASSERT ((x := x) + 1 = 21);
+      ASSERT ((xx := x) + 1 = 21);
+      ASSERT ((xxx := xx) + 1 = 21)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-6.a68 
b/gcc/testsuite/algol68/execute/deref-6.a68
new file mode 100644
index 000000000000..88754d2f58ea
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-6.a68
@@ -0,0 +1,48 @@
+# { dg-options "-fstropping=upper" }  #
+# Dereferencing of struct fields.  #
+BEGIN MODE S = STRUCT (REF INT x, REF REF INT xx, REF REF REF INT xxx);
+
+      INT x := 10;
+      REF INT xx := x;
+      REF REF INT xxx := xx;
+
+      S s = (x, xx, xxx);
+
+      ASSERT (x OF s = 10);
+      ASSERT (xx OF s = 10);
+      ASSERT (xxx OF s = 10);
+      ASSERT ((x) = 10);
+      ASSERT ((xx) = 10);
+      ASSERT ((xxx) = 10);
+      ASSERT (x OF s + 1 = 11);
+      ASSERT (xx OF s + 1 = 11);
+      ASSERT (xxx OF s + 1 = 11);
+      ASSERT ((x OF s + 1) = 11);
+      ASSERT ((xx OF s + 1) = 11);
+      ASSERT ((xxx OF s + 1) = 11);
+      ASSERT ((x OF s := x) = 10);
+      ASSERT ((xx OF s := x) = 10);
+      ASSERT ((xxx OF s := xx) = 10);
+      ASSERT ((x OF s := x) + 1 = 11);
+      ASSERT ((xx OF s := x) + 1 = 11);
+      ASSERT ((xxx OF s := xx) + 1 = 11);
+      x OF s := 20;
+      ASSERT (x OF s = 20);
+      ASSERT (xx OF s = 20);
+      ASSERT (xxx OF s = 20);
+      ASSERT ((x) = 20);
+      ASSERT ((xx) = 20);
+      ASSERT ((xxx) = 20);
+      ASSERT (x OF s + 1 = 21);
+      ASSERT (xx OF s + 1 = 21);
+      ASSERT (xxx OF s + 1 = 21);
+      ASSERT ((x OF s + 1) = 21);
+      ASSERT ((xx OF s + 1) = 21);
+      ASSERT ((xxx OF s + 1) = 21);
+      ASSERT ((x OF s := x) = 20);
+      ASSERT ((xx OF s := x) = 20);
+      ASSERT ((xxx OF s := xx) = 20);
+      ASSERT ((x OF s := x) + 1 = 21);
+      ASSERT ((xx OF s := x) + 1 = 21);
+      ASSERT ((xxx OF s := xx) + 1 = 21)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-7.a68 
b/gcc/testsuite/algol68/execute/deref-7.a68
new file mode 100644
index 000000000000..b2acec98f8db
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-7.a68
@@ -0,0 +1,48 @@
+# { dg-options "-fstropping=upper" }  #
+# Dereferencing of struct fields.  Version with sub-names.  #
+BEGIN MODE S = STRUCT (INT x, REF INT xx, REF REF INT xxx);
+
+      INT x := 10;
+      REF INT xx := x;
+      REF REF INT xxx := xx;
+
+      S s := (x, xx, xxx);
+
+      ASSERT (x OF s = 10);
+      ASSERT (xx OF s = 10);
+      ASSERT (xxx OF s = 10);
+      ASSERT ((x) = 10);
+      ASSERT ((xx) = 10);
+      ASSERT ((xxx) = 10);
+      ASSERT (x OF s + 1 = 11);
+      ASSERT (xx OF s + 1 = 11);
+      ASSERT (xxx OF s + 1 = 11);
+      ASSERT ((x OF s + 1) = 11);
+      ASSERT ((xx OF s + 1) = 11);
+      ASSERT ((xxx OF s + 1) = 11);
+      ASSERT ((x OF s := x) = 10);
+      ASSERT ((xx OF s := xx) = 10);
+      ASSERT ((xxx OF s := xxx) = 10);
+      ASSERT ((x OF s := x) + 1 = 11);
+      ASSERT ((xx OF s := xx) + 1 = 11);
+      ASSERT ((xxx OF s := xxx) + 1 = 11);
+      x := 20;
+      ASSERT (x OF s = 10);
+      ASSERT (xx OF s = 20);
+      ASSERT (xxx OF s = 20);
+      ASSERT ((x) = 20);
+      ASSERT ((xx) = 20);
+      ASSERT ((xxx) = 20);
+      ASSERT (x OF s + 1 = 11);
+      ASSERT (xx OF s + 1 = 21);
+      ASSERT (xxx OF s + 1 = 21);
+      ASSERT ((x OF s + 1) = 11);
+      ASSERT ((xx OF s + 1) = 21);
+      ASSERT ((xxx OF s + 1) = 21);
+      ASSERT ((x OF s := x) = 20);
+      ASSERT ((xx OF s := xx) = 20);
+      ASSERT ((xxx OF s := xxx) = 20);
+      ASSERT ((x OF s := x) + 1 = 21);
+      ASSERT ((xx OF s := xx) + 1 = 21);
+      ASSERT ((xxx OF s := xxx) + 1 = 21)
+END
diff --git a/gcc/testsuite/algol68/execute/deref-8.a68 
b/gcc/testsuite/algol68/execute/deref-8.a68
new file mode 100644
index 000000000000..6d57086a5e14
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/deref-8.a68
@@ -0,0 +1,53 @@
+# { dg-options "-fstropping=upper" }  #
+# Dereferencing of struct fields.  Version with sub-names and
+  explicit assignations instead of initialization in variable declaration.  #
+BEGIN MODE S = STRUCT (INT x, REF INT xx, REF REF INT xxx);
+
+      INT x := 10;
+      REF INT xx := x;
+      REF REF INT xxx := xx;
+
+      S s;
+
+      x OF s := x;
+      xx OF s := xx;
+      xxx OF s := xxx;
+
+      ASSERT (x OF s = 10);
+      ASSERT (xx OF s = 10);
+      ASSERT (xxx OF s = 10);
+      ASSERT ((x) = 10);
+      ASSERT ((xx) = 10);
+      ASSERT ((xxx) = 10);
+      ASSERT (x OF s + 1 = 11);
+      ASSERT (xx OF s + 1 = 11);
+      ASSERT (xxx OF s + 1 = 11);
+      ASSERT ((x OF s + 1) = 11);
+      ASSERT ((xx OF s + 1) = 11);
+      ASSERT ((xxx OF s + 1) = 11);
+      ASSERT ((x OF s := x) = 10);
+      ASSERT ((xx OF s := xx) = 10);
+      ASSERT ((xxx OF s := xxx) = 10);
+      ASSERT ((x OF s := x) + 1 = 11);
+      ASSERT ((xx OF s := xx) + 1 = 11);
+      ASSERT ((xxx OF s := xxx) + 1 = 11);
+      x := 20;
+      ASSERT (x OF s = 10);
+      ASSERT (xx OF s = 20);
+      ASSERT (xxx OF s = 20);
+      ASSERT ((x) = 20);
+      ASSERT ((xx) = 20);
+      ASSERT ((xxx) = 20);
+      ASSERT (x OF s + 1 = 11);
+      ASSERT (xx OF s + 1 = 21);
+      ASSERT (xxx OF s + 1 = 21);
+      ASSERT ((x OF s + 1) = 11);
+      ASSERT ((xx OF s + 1) = 21);
+      ASSERT ((xxx OF s + 1) = 21);
+      ASSERT ((x OF s := x) = 20);
+      ASSERT ((xx OF s := xx) = 20);
+      ASSERT ((xxx OF s := xxx) = 20);
+      ASSERT ((x OF s := x) + 1 = 21);
+      ASSERT ((xx OF s := xx) + 1 = 21);
+      ASSERT ((xxx OF s := xxx) + 1 = 21)
+END
diff --git a/gcc/testsuite/algol68/execute/div-int-1.a68 
b/gcc/testsuite/algol68/execute/div-int-1.a68
new file mode 100644
index 000000000000..6a26a7bef029
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/div-int-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i = 10;
+      LONG INT ii = LONG 10, LONG LONG INT iii = LONG LONG 10;
+      ASSERT (i / 2 = 5.0);
+      ASSERT (ii / LONG 2 = LONG 5.0);
+      ASSERT (iii / LONG LONG 2 = LONG LONG 5.0)
+END
diff --git a/gcc/testsuite/algol68/execute/divab-real-1.a68 
b/gcc/testsuite/algol68/execute/divab-real-1.a68
new file mode 100644
index 000000000000..830ae2e5f8d6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/divab-real-1.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r := 3.14;
+      r DIVAB 2.0;
+      r /:= 2.0;
+      LONG REAL rr := LONG 3.14;
+      rr DIVAB LONG 2.0;
+      rr /:= LONG 2.0;
+      LONG LONG REAL rrr := LONG LONG 3.14;
+      rrr DIVAB LONG LONG 2.0;
+      rrr /:= LONG LONG 2.0
+END
diff --git a/gcc/testsuite/algol68/execute/elem-bits-1.a68 
b/gcc/testsuite/algol68/execute/elem-bits-1.a68
new file mode 100644
index 000000000000..1529b595e749
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/elem-bits-1.a68
@@ -0,0 +1,18 @@
+# { dg-options "-fstropping=upper" }  #
+# ELEM for SIZETY BITS #
+BEGIN BITS b = 2r1010;
+      ASSERT ((bits width - 1) ELEM b);
+      ASSERT (NOT ((bits width - 2) ELEM b));
+      LONG BITS bb = LONG 2r1010;
+      ASSERT ((long bits width - 1) ELEM bb);
+      ASSERT (NOT ((long bits width - 2) ELEM bb));
+      LONG LONG BITS bbb = LONG LONG 2r1010;
+      ASSERT ((long long bits width - 1) ELEM bbb);
+      ASSERT (NOT ((long long bits width - 2) ELEM bbb));
+      SHORT BITS ss = SHORT 2r1010;
+      ASSERT ((short bits width - 1) ELEM ss);
+      ASSERT (NOT ((short bits width - 2) ELEM ss));
+      SHORT SHORT BITS sss = SHORT SHORT 2r1010;
+      ASSERT ((short short bits width - 1) ELEM sss);
+      ASSERT (NOT ((short short bits width - 2) ELEM sss))
+END
diff --git a/gcc/testsuite/algol68/execute/elems-1.a68 
b/gcc/testsuite/algol68/execute/elems-1.a68
new file mode 100644
index 000000000000..da538fcf24d1
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/elems-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (ELEMS "foo" = 3);
+      ASSERT (ELEMS "" = 0);
+      ASSERT (1 ELEMS "foo" = 3);
+      ASSERT (1 ELEMS "" = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/elems-2.a68 
b/gcc/testsuite/algol68/execute/elems-2.a68
new file mode 100644
index 000000000000..0545f4ec67d1
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/elems-2.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Flat and ultra-flat multiples.  #
+BEGIN [3,10:3]INT arr;
+      ASSERT (2 ELEMS arr = 0);
+      [1:0]INT arr2;
+      ASSERT (ELEMS arr2 = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/entier-1.a68 
b/gcc/testsuite/algol68/execute/entier-1.a68
new file mode 100644
index 000000000000..d7c84e23d3e6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/entier-1.a68
@@ -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 (ENTIER x = 3 AND ENTIER y = 3);
+      ASSERT (ENTIER xx = LONG 3 AND ENTIER yy = LONG 3);
+      ASSERT (ENTIER xxx = LONG LONG 3 AND ENTIER yyy = LONG LONG 3)
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-1.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-1.a68
new file mode 100644
index 000000000000..1601ac099729
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY INTs #
+BEGIN ASSERT (max int /= 0);
+      (INT max int = 10; ASSERT (max int = 10));
+      ASSERT (long max int >= LENG max int);
+      ASSERT (long long max int >= LENG long max int);
+      ASSERT (min int /= 0);
+      ASSERT (long min int <= LENG min int);
+      ASSERT (long long min int <= LENG long min int)
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-2.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-2.a68
new file mode 100644
index 000000000000..9f9d5fc0b683
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-2.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY REALs #
+BEGIN ASSERT (max real /= 0.0);
+      ASSERT (long max real >= LENG max real);
+      ASSERT (long long max real >= LENG long max real);
+      ASSERT (min real /= 0.0);
+      ASSERT (long min real <= LENG min real);
+      ASSERT (long long min real <= LENG long min real);
+      ASSERT (small real > 0.0);
+      ASSERT (long small real > LONG 0.0);
+      ASSERT (long long small real > LONG LONG 0.0)
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-3.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-3.a68
new file mode 100644
index 000000000000..7aba4cd4cb18
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-3.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY BITS #
+BEGIN ASSERT (bits width > 0);
+      ASSERT (long bits width >= bits width);
+      ASSERT (long long bits width >= long bits width);
+      ASSERT (short bits width <= bits width);
+      ASSERT (short short bits width <= short bits width)
+END
+
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-4.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-4.a68
new file mode 100644
index 000000000000..b053ed143476
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-4.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for pi constants.  #
+BEGIN ASSERT (pi > 3.0 AND pi < 4.0);
+      ASSERT (long pi > LONG 3.0 AND long pi < LONG 4.0);
+      ASSERT (long long pi > LONG LONG 3.0 AND long long pi < LONG LONG 4.0)
+END
+
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-5.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-5.a68
new file mode 100644
index 000000000000..a46879857b60
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-5.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for certain particular characters.  #
+BEGIN ASSERT (null character /= blank);
+      ASSERT (max abs char = ABS 16r10ffff)
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-6.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-6.a68
new file mode 100644
index 000000000000..a37dd4c2e421
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-6.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY BITs #
+BEGIN ASSERT (max bits /= 10r0);
+      # XXX use LENG max bits below #
+      ASSERT (long max bits >= LONG 10r0);
+      ASSERT (long long max bits >= LONG LONG 10r0)
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-7.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-7.a68
new file mode 100644
index 000000000000..d64a68f28d30
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-7.a68
@@ -0,0 +1,15 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for widths #
+BEGIN ASSERT (int width > 0);
+      ASSERT (long int width > 0);
+      ASSERT (long long int width > 0);
+      ASSERT (short int width > 0);
+      ASSERT (short short int width > 0);
+      ASSERT (real width > 0);
+      ASSERT (long real width > 0);
+      ASSERT (long long real width > 0)
+CO      exp width;
+        long exp width;
+        long long exp width;
+CO
+END
diff --git a/gcc/testsuite/algol68/execute/environment-enquiries-8.a68 
b/gcc/testsuite/algol68/execute/environment-enquiries-8.a68
new file mode 100644
index 000000000000..d464a49d9907
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/environment-enquiries-8.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (flip = "T");
+      ASSERT (flop = "F");
+      ASSERT (error char = "*");
+      ASSERT (ABS invalid char = ABS 16rfffd)
+END
diff --git a/gcc/testsuite/algol68/execute/eq-bits-1.a68 
b/gcc/testsuite/algol68/execute/eq-bits-1.a68
new file mode 100644
index 000000000000..b26df33d8b1a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/eq-bits-1.a68
@@ -0,0 +1,10 @@
+# { 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 = 2r0);
+      ASSERT (bb EQ LONG 8r377);
+      ASSERT (bbb = LONG LONG 8r0);
+      ASSERT (ss EQ SHORT 8r377);
+      ASSERT (sss = SHORT SHORT 8r0)
+END
+
diff --git a/gcc/testsuite/algol68/execute/eq-char-char-1.a68 
b/gcc/testsuite/algol68/execute/eq-char-char-1.a68
new file mode 100644
index 000000000000..eb520d2d6a84
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/eq-char-char-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT ("a" = "a")
+END
+
diff --git a/gcc/testsuite/algol68/execute/eq-int-1.a68 
b/gcc/testsuite/algol68/execute/eq-int-1.a68
new file mode 100644
index 000000000000..399b91aeab75
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/eq-int-1.a68
@@ -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 (12 = i);
+      ASSERT (ii = LONG 12);
+      ASSERT (iii = LONG LONG 12);
+      ASSERT (s = SHORT 12);
+      ASSERT (ss = SHORT SHORT 12)
+END
diff --git a/gcc/testsuite/algol68/execute/eq-string-1.a68 
b/gcc/testsuite/algol68/execute/eq-string-1.a68
new file mode 100644
index 000000000000..0242f02bafb0
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/eq-string-1.a68
@@ -0,0 +1,16 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRING foo = "foo", bar = "bar", quux = "quux";
+      # =  #
+      ASSERT ("" = "");
+      ASSERT ("foo" = foo);
+      ASSERT (NOT (foo = bar));
+      ASSERT (NOT (foo = quux));
+      ASSERT (NOT (quux = foo));
+      # EQ  #
+      ASSERT ("" EQ "");
+      ASSERT ("foo" EQ foo);
+      ASSERT (NOT (foo EQ bar));
+      ASSERT (NOT (foo EQ quux));
+      ASSERT (NOT (quux EQ foo))
+END
+
diff --git a/gcc/testsuite/algol68/execute/eq-string-stride-1.a68 
b/gcc/testsuite/algol68/execute/eq-string-stride-1.a68
new file mode 100644
index 000000000000..6e9cec79a45f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/eq-string-stride-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1", "2", "3"),
+                        ("4", "5", "6"),
+                        ("7", "8", "9"));
+      ASSERT (matrix[1:3,2] = "258")
+END
diff --git a/gcc/testsuite/algol68/execute/execute.exp 
b/gcc/testsuite/algol68/execute/execute.exp
new file mode 100644
index 000000000000..60722c7ad097
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/execute.exp
@@ -0,0 +1,37 @@
+# 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
+
+foreach testcase [lsort [glob -nocomplain $srcdir/$subdir/*.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/factorial-1.a68 
b/gcc/testsuite/algol68/execute/factorial-1.a68
new file mode 100644
index 000000000000..f1fa920ae200
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/factorial-1.a68
@@ -0,0 +1,170 @@
+# { dg-options "-fstropping=upper" }  #
+# The Most Contrived Factorial Program
+  By John P. Baker
+  University of Bristol.
+
+  Published in the Algol Bulletin 42.
+  http://jemarch.net/algol-bulletin-42.pdf
+
+  Version adapted for GCC.
+#
+
+BEGIN INT one = 1, two = 2, three = 3, four = 4, five = 5,
+          six = 6, seven = 7, eight = 8, nine = 9, ten = 10,
+          eleven = 11, twelve = 12;
+      INT a = one;
+      PRIO ME=5, LOVE=7, MY=7, LORDS=7, LADIES=7,
+           PIPERS=7, DRUMMERS=7, MAIDS=7, SWANS=7, GEESE=7,
+           GOLD=7, COLLY=7, FRENCH=7, TURTLE=7, PARTRIDGE=6;
+      BOOL sent to := TRUE;
+      OP THE = (BOOL a) BOOL: a,
+         TWELFTH = (INT a) BOOL: a = twelve,
+         ELEVENTH = (INT a) BOOL: a = eleven,
+         TENTH = (INT a) BOOL: a = ten,
+         NINTH = (INT a) BOOL: a = nine,
+         EIGHTH = (INT a) BOOL: a = eight,
+         SEVENTH = (INT a) BOOL: a = seven,
+         SIXTH = (INT a) BOOL: a = six,
+         FIFTH = (INT a) BOOL: a = five,
+         FOURTH = (INT a) BOOL: a = four,
+         THIRD = (INT a) BOOL: a = three,
+         SECOND = (INT a) BOOL: a = two,
+         FIRST = (INT a) BOOL: a = one;
+      OP ME = (BOOL a, INT b) VOID: SKIP; # XXX when transput done 
(a|print(b)) #
+      OP LOVE = (BOOL a, b) BOOL: (a|b|FALSE),
+         MY = (BOOL a, b) BOOL: a LOVE b;
+      OP AND = (INT a) INT: a;
+      MODE DATE = STRUCT (INT day, month);
+      LOC DATE christmas := (25, 12);
+      OP LORDS = (INT a, b) INT: a * b,
+         LADIES = (INT a, b) INT: a * b,
+         PIPERS = (INT a, b) INT: a * b,
+         DRUMMERS = (INT a, b) INT: a * b,
+         MAIDS = (INT a, b) INT: a * b,
+         SWANS = (INT a, b) INT: a * b,
+         GEESE = (INT a, b) INT: a * b,
+         GOLD = (INT a, b) INT: a * b,
+         COLLY = (INT a, b) INT: a * b,
+         FRENCH = (INT a, b) INT: a * b,
+         TURTLE = (INT a, b) INT: a * b;
+      OP LEAPING = (INT a) INT: a,
+         DANCING = (INT a) INT: a,
+         PIPING = (INT a) INT: a,
+         DRUMMING = (INT a) INT: a,
+         MILKING = (INT a) INT: a,
+         SWIMMING = (INT a) INT: a,
+         LAYING = (INT a) INT: a,
+         RINGS = (INT a) INT: a,
+         BIRDS = (INT a) INT: a,
+         HENS = (INT a) INT: a,
+         DOVES = (INT a) INT: a;
+      OP PARTRIDGE = (INT a, b) INT: a + b;
+      INT in a pear tree = 0;
+
+      # Now we are ready...  #
+
+       THE FIRST day OF christmas MY TRUE LOVE sent to ME
+      a PARTRIDGE in a pear tree;
+
+       THE SECOND day OF christmas MY TRUE LOVE sent to ME
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE THIRD day OF christmas MY TRUE LOVE sent to ME
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE FOURTH day OF christmas MY TRUE LOVE sent to ME
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE FIFTH day OF christmas MY TRUE LOVE sent to ME
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE SIXTH day OF christmas MY TRUE LOVE sent to ME
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE SEVENTH day OF christmas MY TRUE LOVE sent to ME
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE EIGHTH day OF christmas MY TRUE LOVE sent to ME
+      eight MAIDS MILKING
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE NINTH day OF christmas MY TRUE LOVE sent to ME
+      nine DRUMMERS DRUMMING
+      eight MAIDS MILKING
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE TENTH day OF christmas MY TRUE LOVE sent to ME
+      ten PIPERS PIPING
+      nine DRUMMERS DRUMMING
+      eight MAIDS MILKING
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE ELEVENTH day OF christmas MY TRUE LOVE sent to ME
+      eleven LADIES DANCING
+      ten PIPERS PIPING
+      nine DRUMMERS DRUMMING
+      eight MAIDS MILKING
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+       THE TWELFTH day OF christmas MY TRUE LOVE sent to ME
+      twelve LORDS LEAPING
+      eleven LADIES DANCING
+      ten PIPERS PIPING
+      nine DRUMMERS DRUMMING
+      eight MAIDS MILKING
+      seven SWANS SWIMMING
+      six GEESE LAYING
+      five GOLD RINGS
+      four COLLY BIRDS
+      three FRENCH HENS
+      two TURTLE DOVES AND
+      a PARTRIDGE in a pear tree;
+
+   SKIP
+END
+
diff --git a/gcc/testsuite/algol68/execute/flat-assignation-1.a68 
b/gcc/testsuite/algol68/execute/flat-assignation-1.a68
new file mode 100644
index 000000000000..bf973564b1f5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flat-assignation-1.a68
@@ -0,0 +1,7 @@
+{ Assigning to the flexible name replaces the descriptor
+  as well as the elements.  }
+begin [10:0]int flat1;
+      flex[10:-10]int flat2;
+      flat2 := flat1;
+      assert (UPB flat2 = 0 AND LWB flat2 = 10)
+end
diff --git a/gcc/testsuite/algol68/execute/flat-assignation-2.a68 
b/gcc/testsuite/algol68/execute/flat-assignation-2.a68
new file mode 100644
index 000000000000..fb7fa82ba687
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flat-assignation-2.a68
@@ -0,0 +1,8 @@
+{ Assigning to the flexible name replaces the descriptor
+  as well as the elements.  }
+begin [1:20,10:0]int flat1;
+      flex[100:200,10:-10]int flat2;
+      flat2 := flat1;
+      assert (1 UPB flat2 = 20 AND 1 LWB flat2 = 1);
+      assert (2 UPB flat2 = 0  AND 2 LWB flat2 = 10)
+end
diff --git a/gcc/testsuite/algol68/execute/flex-1.a68 
b/gcc/testsuite/algol68/execute/flex-1.a68
new file mode 100644
index 000000000000..4e2bc315097c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flex-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN FLEX[3]INT list := (1,2,3);
+      list[2] := 20;
+      ASSERT (list[2] = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/flex-2.a68 
b/gcc/testsuite/algol68/execute/flex-2.a68
new file mode 100644
index 000000000000..4f18674bc886
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flex-2.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing to flexible rows.  #
+BEGIN FLEX[]INT list = 10;
+      ASSERT (list[1] = 10);
+      FLEX[,]INT table = 10;
+      ASSERT (table[1,1] = 10)
+END
+
diff --git a/gcc/testsuite/algol68/execute/flex-3.a68 
b/gcc/testsuite/algol68/execute/flex-3.a68
new file mode 100644
index 000000000000..8ee388557277
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flex-3.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Slicing flexible names.  #
+BEGIN FLEX[]INT list = (1,2,3);
+      FLEX[]INT sliced = list[2:3];
+      ASSERT (LWB sliced = 1 AND UPB sliced = 2);
+      ASSERT (sliced[1] = 2 AND sliced[2] = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/flex-4.a68 
b/gcc/testsuite/algol68/execute/flex-4.a68
new file mode 100644
index 000000000000..d4d7c998f7dc
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flex-4.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Rowing to flexible rows.  #
+BEGIN FLEX[3]INT list := (1,2,3);
+      list := (10,20,30,40);
+      ASSERT (list[4] = 40)
+END
diff --git a/gcc/testsuite/algol68/execute/flex-5.a68 
b/gcc/testsuite/algol68/execute/flex-5.a68
new file mode 100644
index 000000000000..9f9dccc36640
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/flex-5.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN FLEX[1:0]INT a;
+      ASSERT (LWB a = 1 AND UPB a = 0 AND ELEMS a = 0);
+      a := (1,2,3);
+      ASSERT (LWB a = 1 AND UPB a = 3 AND a[1] = 1 AND a[2] = 2 AND a[3] = 3);
+      a := (10,a[2],a[3]);
+      ASSERT (LWB a = 1 AND UPB a = 3 AND a[1] = 10 AND a[2] = 2 AND a[3] = 3);
+      a := 100;
+      ASSERT (LWB a = 1 AND UPB a = 1 AND a[1] = 100);
+      a := ();
+      ASSERT (LWB a = 1 AND UPB a = 0 AND ELEMS a = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/formula-1.a68 
b/gcc/testsuite/algol68/execute/formula-1.a68
new file mode 100644
index 000000000000..6d2ba4ef82d1
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/formula-1.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN OP JORL = (INT a, b) INT: a + b;
+      OP JORL = (REAL a, b) REAL: a + b;
+      OP JORL = ([]CHAR s) INT: ELEMS s;
+      PRIO JORL = 6;
+      ASSERT (10 JORL 20 = 30);
+      ASSERT (REAL r = 3.14 JORL REAL (1); r > 4.13 AND r < 4.15);
+      ASSERT (JORL "foo" = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/formula-2.a68 
b/gcc/testsuite/algol68/execute/formula-2.a68
new file mode 100644
index 000000000000..5b09f3d870f9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/formula-2.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i;
+      PROC side = INT: (i := 1; i := 2; i);
+      INT res = side + side;
+      # Can be either due to collateral elaboration in the formula above.  #
+      ASSERT (res = 3 OR res = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/fsize-1.a68 
b/gcc/testsuite/algol68/execute/fsize-1.a68
new file mode 100644
index 000000000000..17e3ef2ba9ef
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/fsize-1.a68
@@ -0,0 +1,2 @@
+begin assert (fsize (-1) = - long long 1)
+end
diff --git a/gcc/testsuite/algol68/execute/ge-int-1.a68 
b/gcc/testsuite/algol68/execute/ge-int-1.a68
new file mode 100644
index 000000000000..9ed95321c095
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/ge-int-1.a68
@@ -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 >= 10);
+      ASSERT (ii GE LONG 10);
+      ASSERT (iii >= LONG LONG 12);
+      ASSERT (s >= SHORT 12);
+      ASSERT (ss >= SHORT SHORT 10)
+END
diff --git a/gcc/testsuite/algol68/execute/ge-string-stride-1.a68 
b/gcc/testsuite/algol68/execute/ge-string-stride-1.a68
new file mode 100644
index 000000000000..4f51d6ba6fcb
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/ge-string-stride-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1", "0", "1"),
+                        ("4", "0", "4"),
+                        ("7", "0", "7"));
+      ASSERT (matrix[1:3,1] >= matrix[1:3,3]);
+      ASSERT (("1","4","7") >= matrix[1:3,3])
+END
diff --git a/gcc/testsuite/algol68/execute/gen-flex-1.a68 
b/gcc/testsuite/algol68/execute/gen-flex-1.a68
new file mode 100644
index 000000000000..ce993df27d20
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-flex-1.a68
@@ -0,0 +1,10 @@
+begin flex[10:-10]int je;
+      int num_fields = 3;
+      assert (UPB je = -10 AND LWB je = 10 AND ELEMS je = 0);
+
+      [1:num_fields][1:num_fields]string fields;
+      for i to num_fields
+      do for j to num_fields
+         do assert (fields[i][j] = "") od
+      od
+end
diff --git a/gcc/testsuite/algol68/execute/gen-heap-1.a68 
b/gcc/testsuite/algol68/execute/gen-heap-1.a68
new file mode 100644
index 000000000000..fdf8df23c6ef
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      REF INT var = HEAP INT;
+      var := jorl := 10;
+      ASSERT (var = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-2.a68 
b/gcc/testsuite/algol68/execute/gen-heap-2.a68
new file mode 100644
index 000000000000..80e3a77676c7
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      REF INT var := HEAP INT;
+      var := jorl := 10;
+      ASSERT (var = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-3.a68 
b/gcc/testsuite/algol68/execute/gen-heap-3.a68
new file mode 100644
index 000000000000..e2c026b2bc81
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-3.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      INT var := HEAP INT := 15; # The generated name goes away #
+      ASSERT (var = 15)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-bool-1.a68 
b/gcc/testsuite/algol68/execute/gen-heap-bool-1.a68
new file mode 100644
index 000000000000..d4494f0d7536
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-bool-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF BOOL x = HEAP BOOL;
+      ASSERT (x = FALSE);
+      x := TRUE;
+      ASSERT (x = TRUE)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-int-1.a68 
b/gcc/testsuite/algol68/execute/gen-heap-int-1.a68
new file mode 100644
index 000000000000..8500d792cbad
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-int-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF INT x = HEAP INT := 4;
+      ASSERT (x = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-real-1.a68 
b/gcc/testsuite/algol68/execute/gen-heap-real-1.a68
new file mode 100644
index 000000000000..3ea6dcb7edfe
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-real-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REF REAL x = HEAP REAL := 4;
+      ASSERT (x > 3.9 AND x < 4.1)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-struct-1.a68 
b/gcc/testsuite/algol68/execute/gen-heap-struct-1.a68
new file mode 100644
index 000000000000..2c2f9744371a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-struct-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN HEAP STRUCT(INT i, REAL r) foo;
+      ASSERT (i OF foo = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-struct-2.a68 
b/gcc/testsuite/algol68/execute/gen-heap-struct-2.a68
new file mode 100644
index 000000000000..0803204d2d89
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-struct-2.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN HEAP STRUCT([10]INT i, REAL r) foo;
+      FOR i FROM LWB i OF foo TO UPB i OF foo
+      DO ASSERT ((i OF foo)[i] = 0) OD
+END
diff --git a/gcc/testsuite/algol68/execute/gen-heap-struct-3.a68 
b/gcc/testsuite/algol68/execute/gen-heap-struct-3.a68
new file mode 100644
index 000000000000..849bbbd6234e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-heap-struct-3.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN HEAP STRUCT([10]INT i, STRING s) foo;
+      FOR i FROM LWB i OF foo TO UPB i OF foo
+      DO ASSERT ((i OF foo)[i] = 0) OD
+END
diff --git a/gcc/testsuite/algol68/execute/gen-loc-1.a68 
b/gcc/testsuite/algol68/execute/gen-loc-1.a68
new file mode 100644
index 000000000000..1a61bbea0a12
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-loc-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      REF INT var = LOC INT;
+      var := jorl := 10;
+      ASSERT (var = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-loc-2.a68 
b/gcc/testsuite/algol68/execute/gen-loc-2.a68
new file mode 100644
index 000000000000..fce63efec695
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-loc-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      REF INT var := LOC INT;
+      var := jorl := 10;
+      ASSERT (var = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-loc-3.a68 
b/gcc/testsuite/algol68/execute/gen-loc-3.a68
new file mode 100644
index 000000000000..66c3cf1ea0c5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-loc-3.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT jorl;
+      INT var := LOC INT := 15; # The generated name goes away #
+      ASSERT (var = 15)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-loc-4.a68 
b/gcc/testsuite/algol68/execute/gen-loc-4.a68
new file mode 100644
index 000000000000..6aeb30008e09
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-loc-4.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE NODE = STRUCT (INT code, REF NODE next);
+
+      NODE top := (10, NIL);
+      next OF top := LOC NODE := (20, NIL);
+      ASSERT (code OF top = 10);
+      ASSERT (code OF next OF top = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-multiple-1.a68 
b/gcc/testsuite/algol68/execute/gen-multiple-1.a68
new file mode 100644
index 000000000000..2be0d96e77e3
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-multiple-1.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN MODE JORL = [(INT x; x + 1)]INT;
+      JORL xx;
+      ASSERT (ELEMS xx = 1 AND xx[1] = 0)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-union-1.a68 
b/gcc/testsuite/algol68/execute/gen-union-1.a68
new file mode 100644
index 000000000000..893da2229061
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-union-1.a68
@@ -0,0 +1,17 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN UNION(INT,REAL,[]INT,CHAR) datux;
+      ASSERT (CASE datux
+              IN (INT): 10,
+                 (REAL): 20,
+                 (CHAR): 30,
+                 ([]INT): 40
+              ESAC = 0);
+      []INT ja = (1,2,3);
+      datux := ja;
+      ASSERT (CASE datux
+              IN (INT): 10,
+                 (REAL): 20,
+                 (CHAR): 30,
+                 ([]INT): 40
+              ESAC = 40)
+END
diff --git a/gcc/testsuite/algol68/execute/gen-union-2.a68 
b/gcc/testsuite/algol68/execute/gen-union-2.a68
new file mode 100644
index 000000000000..27ab7a8aeb19
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-union-2.a68
@@ -0,0 +1,20 @@
+# { dg-options "-fstropping=upper" }  #
+# pr UPPER pr  #
+BEGIN [10]UNION(INT,REAL,[]INT,CHAR) datux;
+      FOR i FROM LWB datux TO UPB datux
+      DO ASSERT (CASE datux[i]
+                 IN (INT): 10,
+                    (REAL): 20,
+                    (CHAR): 30,
+                    ([]INT): 40
+                 ESAC = 0);
+         []INT ja = (1,2,3);
+         datux[i] := ja;
+         ASSERT (CASE datux[i]
+                 IN (INT): 10,
+                    (REAL): 20,
+                    (CHAR): 30,
+                    ([]INT): 40
+                 ESAC = 40)
+      OD
+END
diff --git a/gcc/testsuite/algol68/execute/gen-union-3.a68 
b/gcc/testsuite/algol68/execute/gen-union-3.a68
new file mode 100644
index 000000000000..78c5d0585845
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gen-union-3.a68
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+# An union generated from SKIP has -1 as overhead.  #
+BEGIN MODE JSONVAL = UNION (JSONOBJ,JSONSTR),
+           JSONSTR = STRING,
+           JSONOBJ = STRUCT (REF JSONFLD fields),
+           JSONFLD = STRUCT (JSONVAL value, REF JSONFLD next);
+
+      JSONFLD fields;
+      ASSERT (CASE value OF fields
+              IN (JSONSTR s): "string",
+                 (JSONOBJ o): "object"
+              OUT "fuckyou"
+              ESAC = "fuckyou")
+END
diff --git a/gcc/testsuite/algol68/execute/goto-1.a68 
b/gcc/testsuite/algol68/execute/goto-1.a68
new file mode 100644
index 000000000000..7f61575efb2f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/goto-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0;
+beg:  IF (i < 5)
+      THEN i +:= 1;
+           GOTO beg
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/goto-2.a68 
b/gcc/testsuite/algol68/execute/goto-2.a68
new file mode 100644
index 000000000000..7f78215af283
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/goto-2.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN GOTO end;
+      ASSERT(FALSE);
+end:  SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/goto-3.a68 
b/gcc/testsuite/algol68/execute/goto-3.a68
new file mode 100644
index 000000000000..47573d2f8c1d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/goto-3.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN
+   INT i := 0;
+   beginning:
+   IF (i < 5) THEN
+      i +:= 1;
+      GO TO beginning
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/goto-4.a68 
b/gcc/testsuite/algol68/execute/goto-4.a68
new file mode 100644
index 000000000000..c374ca86c1bf
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/goto-4.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN
+   INT i := 0;
+   beginning:
+   IF (i < 5) THEN
+      i +:= 1;
+      beginning
+   FI
+END
diff --git a/gcc/testsuite/algol68/execute/goto-5.a68 
b/gcc/testsuite/algol68/execute/goto-5.a68
new file mode 100644
index 000000000000..a5c720e3e63f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/goto-5.a68
@@ -0,0 +1,20 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC is prime = (INT m) BOOL:
+      BEGIN IF m < 2
+            THEN puts ("program terminated because m is less than 2\n");
+                 GOTO stop
+            FI;
+
+            BOOL factor found := NOT (ODD m OR m = 2);
+            FOR i FROM 3 BY 2 TO m - 1 WHILE NOT factor found
+            DO factor found := m MOD i = 0 OD;
+            factor found
+      END;
+
+      ASSERT (is prime (1));
+      ASSERT (is prime (3));
+      ASSERT (is prime (71));
+      ASSERT (is prime (97));
+      is prime (0);
+      ASSERT (FALSE) # Should jump to stop in the standard postlude.  #
+END
diff --git a/gcc/testsuite/algol68/execute/gt-int-1.a68 
b/gcc/testsuite/algol68/execute/gt-int-1.a68
new file mode 100644
index 000000000000..cd5437b9ff88
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gt-int-1.a68
@@ -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 > 10);
+      ASSERT (ii GT LONG 10);
+      ASSERT (iii > LONG LONG 10);
+      ASSERT (s > SHORT 10);
+      ASSERT (ss > SHORT SHORT 10)
+END
diff --git a/gcc/testsuite/algol68/execute/gt-string-stride-1.a68 
b/gcc/testsuite/algol68/execute/gt-string-stride-1.a68
new file mode 100644
index 000000000000..3f0565cf2716
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/gt-string-stride-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,]CHAR matrix = (("1", "0", "1"),
+                        ("4", "0", "4"),
+                        ("7", "0", "6"));
+      ASSERT (matrix[1:3,1] > matrix[1:3,3]);
+      ASSERT (("1","4","7") > matrix[1:3,3])
+END
diff --git a/gcc/testsuite/algol68/execute/i-1.a68 
b/gcc/testsuite/algol68/execute/i-1.a68
new file mode 100644
index 000000000000..87b6979c6002
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/i-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN COMPL z = 4I5;
+      LONG COMPL zz = LONG 4 I LONG 6;
+      LONG LONG COMPL zzz = LONG LONG 4 I LONG LONG7;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/i-2.a68 
b/gcc/testsuite/algol68/execute/i-2.a68
new file mode 100644
index 000000000000..455f0096e2e2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/i-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN COMPL z = 4.0I5.0;
+      LONG COMPL zz = LONG 4.0 I LONG 6.0;
+      LONG LONG COMPL zzz = LONG LONG 4.0 I LONG LONG 7.0;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/identification-1.a68 
b/gcc/testsuite/algol68/execute/identification-1.a68
new file mode 100644
index 000000000000..71cc808cff4a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identification-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC a = REAL: b := c;
+      REAL b := 1, c := 2;
+      REAL x := a;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/identification-2.a68 
b/gcc/testsuite/algol68/execute/identification-2.a68
new file mode 100644
index 000000000000..8292063373a9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identification-2.a68
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+# The identification of c in the assignation marked with XXX works.
+  In some Algol 68 systems the assignation may fail or result in UB,
+  because the storage of the REF REAL c doesn't exist yet.  In GNU
+  Algol 68 this works and the value yielded by c is guaranteed to be
+  zero.
+#
+
+BEGIN REAL b;
+      b := c; # XXX #
+      ASSERT (b = 0);
+      REAL c;
+      c := b
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-1.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-1.a68
new file mode 100644
index 000000000000..ddfa8f28bcbd
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx = x := 20;
+      ASSERT (xx = 20);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-2.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-2.a68
new file mode 100644
index 000000000000..28ba62a9c64b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-2.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx = x;
+      ASSERT (xx = 10);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-3.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-3.a68
new file mode 100644
index 000000000000..a694c3a640ef
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-3.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT x := 10;
+      REF INT xx = (x := 20);
+      ASSERT (xx = 20);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-4.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-4.a68
new file mode 100644
index 000000000000..d60867eff326
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-4.a68
@@ -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/identity-declaration-5.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-5.a68
new file mode 100644
index 000000000000..7c29de1b92b6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-5.a68
@@ -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/identity-declaration-multiple-1.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-1.a68
new file mode 100644
index 000000000000..9864ab975942
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT foo = (1,2,3);
+      ASSERT (ELEMS foo = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-multiple-2.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-2.a68
new file mode 100644
index 000000000000..6fd973ee4453
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-2.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [][]INT foo = ((1,2,3),(4,5,6));
+      ASSERT (ELEMS foo = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-multiple-3.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-3.a68
new file mode 100644
index 000000000000..2d3b8f3c7bee
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-3.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [3]INT a := (1,2,3);
+      REF[]INT nn = a; # No copy happens here.  #
+      nn[1] := 200;
+      ASSERT (a[1] = 200)
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-multiple-5.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-5.a68
new file mode 100644
index 000000000000..005a3c6c4fbb
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-5.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [:]INT foo = (1,2,3);
+      ASSERT (ELEMS foo = 3)
+END
diff --git 
a/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-1.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-1.a68
new file mode 100644
index 000000000000..c8890c27c3d3
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []INT a = ();
+      ASSERT (UPB a = 0);
+      ASSERT (LWB a = 1);
+      ASSERT (ELEMS a = 0)
+END
diff --git 
a/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-2.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-2.a68
new file mode 100644
index 000000000000..67b5294d15b6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-2.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [,,]INT a = ();
+      ASSERT (1 UPB a = 0);
+      ASSERT (1 LWB a = 1);
+      ASSERT (1 ELEMS a = 0);
+      ASSERT (2 UPB a = 0);
+      ASSERT (2 LWB a = 1);
+      ASSERT (2 ELEMS a = 0);
+      ASSERT (3 UPB a = 0);
+      ASSERT (3 LWB a = 1);
+      ASSERT (3 ELEMS a = 0)
+END
diff --git 
a/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-3.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-3.a68
new file mode 100644
index 000000000000..b74761f74739
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-3.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = ([]INT a) VOID: (ASSERT (ELEMS a = 0));
+      foo ([]INT())
+END
diff --git 
a/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-4.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-4.a68
new file mode 100644
index 000000000000..69bd760298a7
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-multiple-empty-4.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN PROC foo = ([]INT a) VOID: (ASSERT (LWB a = 1 AND UPB a = 0 AND ELEMS a 
= 0));
+      foo (())
+END
diff --git a/gcc/testsuite/algol68/execute/identity-declaration-struct-1.a68 
b/gcc/testsuite/algol68/execute/identity-declaration-struct-1.a68
new file mode 100644
index 000000000000..58e26b057d06
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/identity-declaration-struct-1.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+# An identity declaration shall make a copy of the struct value being
+  ascribed.  #
+BEGIN MODE FOO = STRUCT (STRING s, INT n);
+      FOO f1 := ("foo", 10);
+      FOO f2 = f1;
+      f1 := ("bar", 20);
+      ASSERT (n OF f1 = 20);
+      ASSERT (n OF f2 = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/infinity-1.a68 
b/gcc/testsuite/algol68/execute/infinity-1.a68
new file mode 100644
index 000000000000..a7c4fb29ca30
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/infinity-1.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN infinity;
+      minus infinity
+END
diff --git a/gcc/testsuite/algol68/execute/le-ge-bits-1.a68 
b/gcc/testsuite/algol68/execute/le-ge-bits-1.a68
new file mode 100644
index 000000000000..8b355f1ba457
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/le-ge-bits-1.a68
@@ -0,0 +1,17 @@
+# { dg-options "-fstropping=upper" }  #
+# <= and => for SIZETY BITS #
+BEGIN ASSERT (16rff <= 16rffff);
+      ASSERT (2r101 LE 2r111);
+      ASSERT (2r111 >= 2r101);
+      ASSERT (16rffff GE 16rff);
+
+      ASSERT (LONG 16rff <= LONG 16rffff);
+      ASSERT (LONG 2r101 LE LONG 2r111);
+      ASSERT (LONG 2r111 >= LONG 2r101);
+      ASSERT (LONG 16rffff GE LONG 16rff);
+
+      ASSERT (LONG LONG 16rff <= LONG LONG 16rffff);
+      ASSERT (LONG LONG 2r101 LE LONG LONG 2r111);
+      ASSERT (LONG LONG 2r111 >= LONG LONG 2r101);
+      ASSERT (LONG LONG 16rffff GE LONG LONG 16rff)
+END
diff --git a/gcc/testsuite/algol68/execute/le-int-1.a68 
b/gcc/testsuite/algol68/execute/le-int-1.a68
new file mode 100644
index 000000000000..7ad17d308a3d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/le-int-1.a68
@@ -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 LE LONG 13);
+      ASSERT (iii <= LONG LONG 13);
+      ASSERT (s <= SHORT 12);
+      ASSERT (ss <= SHORT SHORT 13)
+END
diff --git a/gcc/testsuite/algol68/execute/le-string-stride-1.a68 
b/gcc/testsuite/algol68/execute/le-string-stride-1.a68
new file mode 100644
index 000000000000..b0fab2af55d8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/le-string-stride-1.a68
@@ -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","9") <= matrix[1:3,3])
+END
diff --git a/gcc/testsuite/algol68/execute/leng-shorten-bits-1.a68 
b/gcc/testsuite/algol68/execute/leng-shorten-bits-1.a68
new file mode 100644
index 000000000000..58b5d00efa59
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/leng-shorten-bits-1.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# SHORTEN and LENG on SIZETY BITS #
+BEGIN ASSERT (LENG 16rff = LONG 16rff);
+      ASSERT (SHORTEN LONG 16rffff = 16rffff);
+      ASSERT (LENG LONG 16rffff = LONG LONG 16rffff);
+      ASSERT (SHORTEN LONG LONG 16rffff = LONG 16rffff)
+END
diff --git a/gcc/testsuite/algol68/execute/leng-shorten-ints-1.a68 
b/gcc/testsuite/algol68/execute/leng-shorten-ints-1.a68
new file mode 100644
index 000000000000..d615f40c2fa2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/leng-shorten-ints-1.a68
@@ -0,0 +1,27 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY INTs #
+BEGIN # LENG  #
+      (SHORT SHORT INT iii = short short max int; ASSERT (LENG iii = LENG 
short short max int));
+      (SHORT INT ii = short max int; ASSERT (LENG ii = LENG short max int));
+      (INT i = max int; ASSERT (LENG i = LENG max int));
+      (LONG INT ii = long max int; ASSERT (LENG ii = LENG long max int));
+      # SHORTEN  #
+      (SHORT INT i = SHORT 10; SHORT SHORT INT ii = SHORT SHORT 100; ASSERT 
(ii + SHORTEN i = SHORT SHORT 110));
+      IF int shorths > 2
+      THEN (SHORT INT ii = LENG short short max int - SHORT 2;
+            ASSERT (SHORTEN ii = short short max int - SHORT SHORT 2));
+           (SHORT INT ii = LENG short short max int + SHORT 1; ASSERT (SHORTEN 
ii = short short max int));
+           (SHORT INT ii = LENG short short min int - SHORT 1; ASSERT (SHORTEN 
ii = short short min int))
+      FI;
+      (INT i = LENG short max int - 2; ASSERT (SHORTEN i = SHORTEN max int - 
SHORT 2));
+      (INT i = LENG short max int + 1; ASSERT (SHORTEN i = SHORTEN max int));
+      (INT i = LENG short min int - 1; ASSERT (SHORTEN i = SHORTEN min int));
+      (LONG INT ii = LENG max int - LONG 2; ASSERT (SHORTEN ii = max int - 2));
+      (LONG INT ii = LENG max int + LONG 1; ASSERT (SHORTEN ii = max int));
+      (LONG INT ii = LENG min int - LONG 1; ASSERT (SHORTEN ii = min int));
+      IF int lengths > 2
+      THEN (LONG LONG INT ii = LENG long max int - LONG LONG 2; ASSERT 
(SHORTEN ii = long max int - LONG 2));
+           (LONG LONG INT ii = LENG long max int + LONG LONG 1; ASSERT 
(SHORTEN ii = long max int));
+           (LONG LONG INT ii = LENG long min int - LONG LONG 1; ASSERT 
(SHORTEN ii = long min int))
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/leng-shorten-reals-1.a68 
b/gcc/testsuite/algol68/execute/leng-shorten-reals-1.a68
new file mode 100644
index 000000000000..dd6ed8c590ed
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/leng-shorten-reals-1.a68
@@ -0,0 +1,17 @@
+# { dg-options "-fstropping=upper" }  #
+# Environment enquiries for SIZETY REALs #
+BEGIN # LENG  #
+      (REAL i = max real; ASSERT (LENG i = LENG max real));
+      (LONG REAL ii = long max real; ASSERT (LENG ii = LENG long max real));
+
+      # SHORTEN  #
+      (LONG REAL ii = LENG max real - LONG 2.0; ASSERT (SHORTEN ii = max real 
- 2.0));
+      (LONG REAL ii = LENG max real + LONG 1.0; ASSERT (SHORTEN ii = max 
real));
+      (LONG REAL ii = LENG min real - LONG 1.0; ASSERT (SHORTEN ii = min 
real));
+      IF (long long max real > LENG long max real)
+      THEN (LONG LONG REAL ii = LENG long max real - LONG LONG 2.0;
+            ASSERT (SHORTEN ii = long max real - LONG 2.0));
+           (LONG LONG REAL ii = LENG long max real + LONG LONG 1.0; ASSERT 
(SHORTEN ii = long max real));
+           (LONG LONG REAL ii = LENG long min real - LONG LONG 1.0; ASSERT 
(SHORTEN ii = long min real))
+      FI
+END
diff --git a/gcc/testsuite/algol68/execute/lengths-shorths-1.a68 
b/gcc/testsuite/algol68/execute/lengths-shorths-1.a68
new file mode 100644
index 000000000000..f1c892354243
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/lengths-shorths-1.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN ASSERT (int lengths > 0);
+      ASSERT (int shorths > 0);
+      ASSERT (bits lengths > 0);
+      ASSERT (bits shorths > 0);
+      ASSERT (real lengths > 0);
+      ASSERT (real shorths > 0)
+END
diff --git a/gcc/testsuite/algol68/execute/lisp-1.a68 
b/gcc/testsuite/algol68/execute/lisp-1.a68
new file mode 100644
index 000000000000..8cec7f6e94e7
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/lisp-1.a68
@@ -0,0 +1,25 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT num ints := 0, num chars := 0;
+      PROC collect stats = (REF CONS tree) VOID:
+      BEGIN REF CONS e := tree;
+            WHILE REF CONS (e) ISNT NIL
+            DO CASE car OF e
+               IN (CHAR c): num chars +:= 1,
+                  (INT): num ints +:= 1,
+                  (REF CONS s): collect stats (s)
+               ESAC;
+               e := cdr OF e
+            OD
+      END;
+      MODE ATOM = UNION (CHAR, INT);
+      MODE CONS = STRUCT (UNION (ATOM, REF CONS) car, REF CONS cdr);
+      PROC list = ([]UNION (ATOM, REF CONS) item) REF CONS:
+      BEGIN REF CONS a := NIL;
+            FOR i FROM UPB item BY -1 TO 1
+            DO a := HEAP CONS := (item[i], a) OD;
+            a
+      END;
+      REF CONS expression := list (("X", "+", list (("Y", "x", 2))));
+      collect stats (expression);
+      ASSERT (num ints = 1 AND num chars = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/lisp-2.a68 
b/gcc/testsuite/algol68/execute/lisp-2.a68
new file mode 100644
index 000000000000..79ae697fd17d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/lisp-2.a68
@@ -0,0 +1,21 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT num constants := 0, num vars := 0, num operators := 0;
+      PROC collect stats = (REF EXPRESSION expr) VOID:
+      BEGIN CASE left OF expr
+            IN (INT): num constants +:= 1,
+               (CHAR): num vars +:= 1,
+               (REF EXPRESSION s): collect stats (s)
+            ESAC;
+            num operators +:= 1;
+            CASE right OF expr
+            IN (INT): num constants +:= 1,
+               (CHAR): num vars +:= 1,
+               (REF EXPRESSION s): collect stats (s)
+            ESAC
+      END;
+      MODE OPERAND = UNION (CHAR,INT,REF EXPRESSION),
+           EXPRESSION = STRUCT (OPERAND left, CHAR operator, OPERAND right);
+      REF EXPRESSION expression := HEAP EXPRESSION := ("X", "+", HEAP 
EXPRESSION := ("Y", "x", 2));
+      collect stats (expression);
+      ASSERT (num constants = 1 AND num vars = 2 AND num operators = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/ln-1.a68 
b/gcc/testsuite/algol68/execute/ln-1.a68
new file mode 100644
index 000000000000..5c569711bb49
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/ln-1.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 1.0;
+      LONG REAL rr = LONG 2.0;
+      LONG LONG REAL rrr = LONG LONG 60.0;
+      ASSERT (ln (r) = 0.0);
+      long ln (rr);
+      long long ln (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/log-1.a68 
b/gcc/testsuite/algol68/execute/log-1.a68
new file mode 100644
index 000000000000..b1a8d8d11caf
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/log-1.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL r = 1.0;
+      LONG REAL rr = LONG 2.0;
+      LONG LONG REAL rrr = LONG LONG 60.0;
+      ASSERT (log (r) = 0.0);
+      long log (rr);
+      long long log (rrr)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-1.a68 
b/gcc/testsuite/algol68/execute/loop-1.a68
new file mode 100644
index 000000000000..91e47c09b57e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-1.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0;
+      DO i +:= 1; IF i = 5 THEN exit FI
+      OD;
+exit: ASSERT (i = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-10.a68 
b/gcc/testsuite/algol68/execute/loop-10.a68
new file mode 100644
index 000000000000..53e382356fb7
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-10.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0, n := 2;
+      FOR a FROM n BY 2 TO n + 2 DO i +:= a OD;
+      ASSERT (i = 2 + 4)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-11.a68 
b/gcc/testsuite/algol68/execute/loop-11.a68
new file mode 100644
index 000000000000..eecaade529b4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-11.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Negative steps towards minus infinity.  #
+BEGIN INT i := 0, n := -5;
+      BY -1 TO n - 1 DO i -:= 1 OD;
+      ASSERT (i = -8)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-12.a68 
b/gcc/testsuite/algol68/execute/loop-12.a68
new file mode 100644
index 000000000000..ffd34a5945a1
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-12.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0, n := 5;
+      FOR a TO n WHILE a < 3 DO i +:= 1 OD;
+      ASSERT (i = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-13.a68 
b/gcc/testsuite/algol68/execute/loop-13.a68
new file mode 100644
index 000000000000..dbbd9b966c89
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-13.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT i := 0;
+      FOR a FROM 2 BY 1 WHILE a <= 10
+      DO i +:= 1 OD;
+      ASSERT (i = 9)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-14.a68 
b/gcc/testsuite/algol68/execute/loop-14.a68
new file mode 100644
index 000000000000..bf06f986adc8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-14.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# The while-part shall not be elaborated if the iterator is exhausted.  #
+BEGIN STRING s = "abc", INT j := 0;
+      FOR i TO UPB s WHILE s[i] /= "x"
+      DO j +:= 1 OD;
+      ASSERT (j = 3)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-2.a68 
b/gcc/testsuite/algol68/execute/loop-2.a68
new file mode 100644
index 000000000000..a92efb398753
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-2.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# While loop.  #
+BEGIN INT i := 0;
+      WHILE INT j = 5; i < j
+      DO i +:= 1 OD;
+      ASSERT (i = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-3.a68 
b/gcc/testsuite/algol68/execute/loop-3.a68
new file mode 100644
index 000000000000..63b3e203a52c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-3.a68
@@ -0,0 +1,14 @@
+# { dg-options "-fstropping=upper" }  #
+# Nested loops.  #
+BEGIN INT i := 10, res := 0;
+      WHILE i > 0
+      DO INT j := 10;
+         WHILE j > 0
+         DO res +:= 1;
+            j -:= 1
+         OD;
+         ASSERT (j = 0);
+         i -:= 1;
+      OD;
+      ASSERT (i = 0 AND res = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-4.a68 
b/gcc/testsuite/algol68/execute/loop-4.a68
new file mode 100644
index 000000000000..491e569b2b97
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-4.a68
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+# Nested loops and j on outside range.  #
+BEGIN INT i := 10, j := 10, res := 0;
+      WHILE i > 0
+      DO j := 10;
+         WHILE j > 0
+         DO res +:= 1;
+            j -:= 1
+         OD;
+         i -:= 1
+      OD;
+      ASSERT (i = 0 AND j = 0 AND res = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-5.a68 
b/gcc/testsuite/algol68/execute/loop-5.a68
new file mode 100644
index 000000000000..ca0cae644305
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-5.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Skip in loop.  #
+BEGIN INT i := 0;
+      WHILE i +:= 1; i < 10
+      DO SKIP OD;
+      ASSERT (i = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/loop-6.a68 
b/gcc/testsuite/algol68/execute/loop-6.a68
new file mode 100644
index 000000000000..216a5643aec3
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/loop-6.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# The range of the while-part shall cover the do-part.  #
+BEGIN INT i := 0;
+      WHILE INT incr = 2; i < 10
+      DO i +:= incr OD;
+      ASSERT (i = 10)
+END

Reply via email to