Signed-off-by: Jose E. Marchesi <[email protected]>

gcc/testsuite/ChangeLog

        * algol68/compile/mcgt-1.3b.a68: New file.
        * algol68/compile/mcgt-7.1.3a-bis.a68: Likewise.
        * algol68/compile/mcgt-7.1.3a.a68: Likewise.
        * algol68/execute/mcgt/execute.exp: Likewise.
        * algol68/execute/mcgt/mcgt-1.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-1.3c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.2.1a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.2.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.2.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.3b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.3c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.3e.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.4.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.4.2b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.4.2c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.4.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.6a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.6b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.7d.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.7e.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.8a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.8b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-2.9.1a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-3.5.1a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-3.5d.a68: Likewise.
        * algol68/execute/mcgt/mcgt-3.7.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-3.8.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-3.9.1b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.1.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.1.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.1.6a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.1.6b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.1.6c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.2.6a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.2.6b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.2.6d.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.3.1a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.3.1b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-4.3.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-5.1.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-5.1.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-5.1.3c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-5.1.5a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-6.2.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-6.2.2b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-6.2.2c.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.1.1a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.1.1b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.1.3a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.3.2a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.3.6a.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.3.6b.a68: Likewise.
        * algol68/execute/mcgt/mcgt-7.5.3a.a68: Likewise.
---
 gcc/testsuite/algol68/compile/mcgt-1.3b.a68   |  5 ++++
 .../algol68/compile/mcgt-7.1.3a-bis.a68       |  8 +++++
 gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68 |  8 +++++
 .../algol68/execute/mcgt/execute.exp          | 29 +++++++++++++++++++
 .../algol68/execute/mcgt/mcgt-1.3a.a68        |  4 +++
 .../algol68/execute/mcgt/mcgt-1.3c.a68        |  4 +++
 .../algol68/execute/mcgt/mcgt-2.2.1a.a68      |  4 +++
 .../algol68/execute/mcgt/mcgt-2.2.2a.a68      |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.2.3a.a68      |  4 +++
 .../algol68/execute/mcgt/mcgt-2.3a.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.3b.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.3c.a68        |  6 ++++
 .../algol68/execute/mcgt/mcgt-2.3e.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.4.2a.a68      |  6 ++++
 .../algol68/execute/mcgt/mcgt-2.4.2b.a68      | 11 +++++++
 .../algol68/execute/mcgt/mcgt-2.4.2c.a68      |  9 ++++++
 .../algol68/execute/mcgt/mcgt-2.4.3a.a68      |  4 +++
 .../algol68/execute/mcgt/mcgt-2.6a.a68        |  6 ++++
 .../algol68/execute/mcgt/mcgt-2.6b.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.7d.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.7e.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.8a.a68        |  6 ++++
 .../algol68/execute/mcgt/mcgt-2.8b.a68        |  5 ++++
 .../algol68/execute/mcgt/mcgt-2.9.1a.a68      |  6 ++++
 .../algol68/execute/mcgt/mcgt-3.5.1a.a68      | 10 +++++++
 .../algol68/execute/mcgt/mcgt-3.5d.a68        |  9 ++++++
 .../algol68/execute/mcgt/mcgt-3.7.2a.a68      |  5 ++++
 .../algol68/execute/mcgt/mcgt-3.8.2a.a68      | 13 +++++++++
 .../algol68/execute/mcgt/mcgt-3.9.1b.a68      | 16 ++++++++++
 .../algol68/execute/mcgt/mcgt-4.1.2a.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.1.3a.a68      |  9 ++++++
 .../algol68/execute/mcgt/mcgt-4.1.6a.a68      |  8 +++++
 .../algol68/execute/mcgt/mcgt-4.1.6b.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.1.6c.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.2.6a.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.2.6b.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.2.6d.a68      | 11 +++++++
 .../algol68/execute/mcgt/mcgt-4.3.1a.a68      |  7 +++++
 .../algol68/execute/mcgt/mcgt-4.3.1b.a68      | 15 ++++++++++
 .../algol68/execute/mcgt/mcgt-4.3.2a.a68      |  5 ++++
 .../algol68/execute/mcgt/mcgt-5.1.2a.a68      | 15 ++++++++++
 .../algol68/execute/mcgt/mcgt-5.1.3a.a68      | 12 ++++++++
 .../algol68/execute/mcgt/mcgt-5.1.3c.a68      | 29 +++++++++++++++++++
 .../algol68/execute/mcgt/mcgt-5.1.5a.a68      | 19 ++++++++++++
 .../algol68/execute/mcgt/mcgt-6.2.2a.a68      |  5 ++++
 .../algol68/execute/mcgt/mcgt-6.2.2b.a68      |  6 ++++
 .../algol68/execute/mcgt/mcgt-6.2.2c.a68      |  6 ++++
 .../algol68/execute/mcgt/mcgt-7.1.1a.a68      |  8 +++++
 .../algol68/execute/mcgt/mcgt-7.1.1b.a68      | 11 +++++++
 .../algol68/execute/mcgt/mcgt-7.1.3a.a68      |  8 +++++
 .../algol68/execute/mcgt/mcgt-7.3.2a.a68      | 11 +++++++
 .../algol68/execute/mcgt/mcgt-7.3.6a.a68      | 23 +++++++++++++++
 .../algol68/execute/mcgt/mcgt-7.3.6b.a68      | 12 ++++++++
 .../algol68/execute/mcgt/mcgt-7.5.3a.a68      |  8 +++++
 54 files changed, 476 insertions(+)
 create mode 100644 gcc/testsuite/algol68/compile/mcgt-1.3b.a68
 create mode 100644 gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68
 create mode 100644 gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/execute.exp
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-1.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-1.3c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.1a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.3b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.3c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.3e.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.6a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.6b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.7d.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.7e.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.8a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.8b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-2.9.1a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-3.5.1a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-3.5d.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-3.7.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-3.8.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-3.9.1b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6d.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.5a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2c.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.3a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.2a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6a.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6b.a68
 create mode 100644 gcc/testsuite/algol68/execute/mcgt/mcgt-7.5.3a.a68

diff --git a/gcc/testsuite/algol68/compile/mcgt-1.3b.a68 
b/gcc/testsuite/algol68/compile/mcgt-1.3b.a68
new file mode 100644
index 00000000000..80fc4a1c976
--- /dev/null
+++ b/gcc/testsuite/algol68/compile/mcgt-1.3b.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+
+BEGIN REAL r := 10.0, circum, area;
+      circum := 2 * pi * r; area := pi * r * r
+END
diff --git a/gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68 
b/gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68
new file mode 100644
index 00000000000..132f0c57972
--- /dev/null
+++ b/gcc/testsuite/algol68/compile/mcgt-7.1.3a-bis.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+
+# Transient references and declarations.  #
+BEGIN FLEX[4,6]INT p;
+      # Illegal, cannot remember transient name.  #
+      REF[]INT q2 = p[3,]; # { dg-error "" }  #
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68 
b/gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
new file mode 100644
index 00000000000..be3f12ac7e3
--- /dev/null
+++ b/gcc/testsuite/algol68/compile/mcgt-7.1.3a.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+
+# Transient references and declarations.  #
+BEGIN FLEX[4,6]INT p;
+      # Illegal.  p cannot be deflexed since it is a REF FLEX.  #
+      REF[,]INT q3 = p; # { dg-error "" }  #
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/execute.exp 
b/gcc/testsuite/algol68/execute/mcgt/execute.exp
new file mode 100644
index 00000000000..f07333f483a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/execute.exp
@@ -0,0 +1,29 @@
+# Copyright (C) 2024 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# 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/>.
+
+if $tracelevel then {
+    strace $tracelevel
+}
+
+load_lib algol68-torture.exp
+
+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
+}
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3a.a68
new file mode 100644
index 00000000000..c99c25feb88
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3a.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN REAL e = 2.7182818284; REAL circum;
+      circum := 2 * pi * e
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3c.a68
new file mode 100644
index 00000000000..883d4e918ae
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-1.3c.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 10, result;
+      result := n * (n + 1) * (2 * n + 1)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.1a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.1a.a68
new file mode 100644
index 00000000000..4179a8221d4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.1a.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+# Integer denotations.  #
+BEGIN 000; 43; 456; 0
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.2a.a68
new file mode 100644
index 00000000000..3bd34667dde
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.2a.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Real denotations.  #
+BEGIN .5; 0.5; 2.0; .001;
+      2.3e1; 2e0; 2e+0; 2e-0
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.3a.a68
new file mode 100644
index 00000000000..a9aa44c3199
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.2.3a.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+# Character denotations.  #
+BEGIN "X"; "a"; "1"; "."; " "
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3a.a68
new file mode 100644
index 00000000000..e8f403b119b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3a.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Identifiers.  #
+BEGIN INT circum, r, ibm, a1, log2, begin;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3b.a68
new file mode 100644
index 00000000000..be7368f24a9
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3b.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Identity declarations.  #
+BEGIN REAL e = 2.7182818284, log2 = 0.618, INT ten = 10, g = 32;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3c.a68
new file mode 100644
index 00000000000..676f9892bd8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3c.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Equivalent declarations.  #
+BEGIN REAL x = 2.34;
+      REF INT n = LOC INT, REF INT m = LOC INT;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3e.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3e.a68
new file mode 100644
index 00000000000..1a0dffe1e4b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.3e.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Initialisation.  #
+BEGIN CHAR firstchar := "A", lastchar := "Z", currentchar;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2a.a68
new file mode 100644
index 00000000000..f304b8f21b6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2a.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Ordinary division.  #
+BEGIN ASSERT (4/2 = 2.0);
+      INT a = 4, b = 7;
+      a/b # Yields a value of mode REAL.  #
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2b.a68
new file mode 100644
index 00000000000..ed0b0c48676
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2b.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+# Integer division.  The operator OVER (%) performs integer
+  division with truncation.  #
+BEGIN ASSERT (4 % 2 = 2);
+      ASSERT (4 OVER 2 = 2);
+      ASSERT (5 % 3 = 1);
+      ASSERT (5 OVER 3 = 1);
+      INT n = -5, m = -3;
+      ASSERT (n % 3 = -1);
+      ASSERT (n % m = 1)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2c.a68
new file mode 100644
index 00000000000..a63eb7eeb5c
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.2c.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# Integer modulus.  The operator MOD (%*) performs integer modulus
+  with truncation.  #
+BEGIN ASSERT (0 MOD 4 = 0);
+      ASSERT (0 %* 4 = 0);
+      ASSERT (5 %* 3 = 2);
+      INT m = 5, n = -3;
+      ASSERT (m MOD n = 2)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.3a.a68
new file mode 100644
index 00000000000..d8707ee83a4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.4.3a.a68
@@ -0,0 +1,4 @@
+# { dg-options "-fstropping=upper" }  #
+# Exponentiation.  #
+BEGIN ASSERT (2 ** 3 = 8)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6a.a68
new file mode 100644
index 00000000000..68f8ee13ea4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6a.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Comparison operators.  #
+BEGIN REAL x = 2.7, y = 3.6, z = 4.7;
+      ASSERT (x < y);
+      ASSERT ("B" /= "C")
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6b.a68
new file mode 100644
index 00000000000..c61342f3ac0
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.6b.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Comparison operators and boolean operators.  #
+BEGIN INT a = 4, b = 5, c = 9, REAL x = 4.7, y = 5.7, z = 6.7;
+      ASSERT (NOT (x + y < z) AND a + b = c)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7d.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7d.a68
new file mode 100644
index 00000000000..aa035f264e3
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7d.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Widening.  #
+BEGIN REAL x := 4, y := 7, z := 2.7;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7e.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7e.a68
new file mode 100644
index 00000000000..ad423a5a81e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.7e.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Dereferencing and widening.  #
+BEGIN INT n, REAL x = n;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8a.a68
new file mode 100644
index 00000000000..23d5e5158d4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8a.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Examples of assignations.  #
+BEGIN REAL pi = 3.14, e = 2.71, INT n = 10, REAL circum, INT result;
+      circum := 2 * pi * e;
+      result := n * (n + 1) * ( 2 * n + 1)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8b.a68
new file mode 100644
index 00000000000..1b5d642b8f8
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.8b.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Coercions and assignations.  #
+BEGIN REAL y, INT n, m := 1;
+      y := n % m
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-2.9.1a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.9.1a.a68
new file mode 100644
index 00000000000..e5e2e781591
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-2.9.1a.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Arithmetical assignment operators.  #
+BEGIN INT m, n := 4;
+      n PLUSAB 1;
+      ASSERT (n = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5.1a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5.1a.a68
new file mode 100644
index 00000000000..85080ea3201
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5.1a.a68
@@ -0,0 +1,10 @@
+# { dg-options "-fstropping=upper" }  #
+# Equivalence.  #
+BEGIN INT m := 3; REF INT p = m;
+      ASSERT (m = 3 AND p = 3);
+      BEGIN INT m := 100;
+            ASSERT (m = 100 AND p = 3);
+            m -:= 1; p +:= 1
+      END;
+      ASSERT (m = 4 AND p = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5d.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5d.a68
new file mode 100644
index 00000000000..5f02498ec82
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.5d.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# On the availability and accessibility of space.  #
+BEGIN INT m := 3, INT five = 5;
+      ASSERT (m = 3);
+      BEGIN INT m := 100; CHAR five = "5";
+            m +:= 1
+      END;
+      ASSERT (m = 3 AND five = 5)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-3.7.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.7.2a.a68
new file mode 100644
index 00000000000..b6514eb8afe
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.7.2a.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT p := 10, q := 12;
+      FROM p TO q DO (p +:= 1, q +:= 1) OD;
+      ASSERT (p = 13 AND q = 15)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-3.8.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.8.2a.a68
new file mode 100644
index 00000000000..bfc67c9dbb6
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.8.2a.a68
@@ -0,0 +1,13 @@
+# { dg-options "-fstropping=upper" }  #
+# Using case clauses.  #
+BEGIN PROC is divisible = (INT m) BOOL:
+      BEGIN BOOL divisible := FALSE;
+            FOR i TO 4 WHILE NOT divisible
+            DO INT k = (i|3, 5, 7, 11);
+               divisible := m MOD k = 0
+            OD;
+            divisible
+      END;
+      ASSERT (is divisible (50));
+      ASSERT (is divisible (253))
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-3.9.1b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.9.1b.a68
new file mode 100644
index 00000000000..01ef062fb5f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-3.9.1b.a68
@@ -0,0 +1,16 @@
+# { dg-options "-fstropping=upper" }  #
+# Using jumps.  #
+BEGIN INT a, INT b = 0, c = 2, d = 10, BOOL e = TRUE;
+      CO The following program using jumps is equivalent to:
+         FOR a FROM b BY c TO d WHILE e DO SKIP OD
+      CO
+      BEGIN INT j := b, INT k = c, m = d;
+      next: IF (k > 0 AND j <= m) OR (k < 0 AND j >= m) OR k = 0
+            THEN INT i = j;
+                 IF e
+                 THEN SKIP; j +:= k; GOTO next
+                 FI
+            FI;
+            ASSERT (j = 12)
+      END
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.2a.a68
new file mode 100644
index 00000000000..98e43c62334
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.2a.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Monadic lwb and upb.  #
+BEGIN INT n := 4; [n]INT a;
+      ASSERT (UPB a = 4);
+      n := 6;
+      ASSERT (UPB a = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.3a.a68
new file mode 100644
index 00000000000..b2592404700
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.3a.a68
@@ -0,0 +1,9 @@
+# { dg-options "-fstropping=upper" }  #
+# Dyadic lwb an upb.  #
+BEGIN [0:10,-4:100]REAL xx;
+      ASSERT (1 LWB xx = 0);
+      ASSERT (1 UPB xx = 10);
+      ASSERT (1 UPB xx = UPB xx);
+      ASSERT (2 LWB xx = -4);
+      ASSERT (2 UPB xx = 100)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6a.a68
new file mode 100644
index 00000000000..e17a9ccc17b
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6a.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN [4]REAL x2 := (6, 7, 8, 9);
+      ASSERT (x2[2] > 6.9);
+      ASSERT (x2[2] < 7.1);
+      x2 := (1, 1, 1, 1);
+      ASSERT(x2[2] > 0.9);
+      ASSERT(x2[2] < 1.1)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6b.a68
new file mode 100644
index 00000000000..09302dac5f2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6b.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Multi-dimensional row displays.  #
+BEGIN [2,3]INT aa := ((1,2,3),(4,5,6));
+      [2,3,4]REAL bb := (((1,2,3,4), (5,6,7,8), (9,10,11,12)),
+                         ((13,14,15,16),(17,18,19,20),(21,22,2,24)));
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6c.a68
new file mode 100644
index 00000000000..241e134bf72
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.1.6c.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Further row displays.  #
+BEGIN [4]INT a, b;
+      [4]INT c := a, d := (1,2,3,0);
+      [2,4]INT ab := (a,b), cd := ((0,0,0,0), b);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6a.a68
new file mode 100644
index 00000000000..ed1fa42771a
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6a.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN STRUCT (INT day, month, year) indep day = (4, 7, 1776);
+      ASSERT (day OF indep day = 4);
+      ASSERT (month OF indep day = 7);
+      ASSERT (year OF indep day = 1776);
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6b.a68
new file mode 100644
index 00000000000..2f1ad2021d4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6b.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN []STRUCT(CHAR letter, INT integer) roman
+        = (("I",1),("V",5),("X",10),("L",50),("C",100));
+      # XXX letter OF roman should be ("I","V","X","L","C")  #
+      # XXX integer OF roman whould be (1,5,10,50,100)  #
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6d.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6d.a68
new file mode 100644
index 00000000000..8718efd7cd5
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.2.6d.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+# Multiple values and structures.
+
+  Having strings of different lenghts would not be valid in a variable
+  declaration, but is acceptable in an identity declaration.
+#
+BEGIN []STRUCT ([]CHAR name, INT age) family =
+         (("JOHN", 3), ("ROBERT", 1), ("CATHERINE", 4));
+      SKIP
+END
+
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1a.a68
new file mode 100644
index 00000000000..0fae194fb22
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1a.a68
@@ -0,0 +1,7 @@
+# { dg-options "-fstropping=upper" }  #
+# Simple mode declarations.  #
+BEGIN MODE INTEGER = INT;
+      MODE Z = INT, R = REAL, B = BOOL, V = VOID;
+      MODE ARRAYA = [100]INT, ARRAYB = [10,2:9]REAL;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1b.a68
new file mode 100644
index 00000000000..d98d7ec117e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.1b.a68
@@ -0,0 +1,15 @@
+# { dg-options "-fstropping=upper" }  #
+# Dynamic arrays revisited.  #
+BEGIN INT p := 2, q := 10;
+      MODE M = [p:q]INT;
+      M a;
+      ASSERT (LWB a = 2 AND UPB a = 10);
+      q := 4;
+      M b;
+      ASSERT (LWB a = 2 AND UPB a = 10);
+      ASSERT (LWB b = 2 AND UPB b = 4);
+      M c = (1,2,3,4); # M is interpreted as formal declarer.
+                         Bounds are ignored.
+                       #
+      ASSERT (LWB c = 1 AND UPB c = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.2a.a68
new file mode 100644
index 00000000000..039a661a62f
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-4.3.2a.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Rows of integers.  #
+BEGIN [][]INT g = ((1,2,3),(4,5),(6,7,8,9));
+      ASSERT (UPB g[1] = 3 AND UPB g[2] = 2 AND UPB g[3] = 4)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.2a.a68
new file mode 100644
index 00000000000..9d77795ad8d
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.2a.a68
@@ -0,0 +1,15 @@
+# { dg-options "-fstropping=upper" }  #
+# Procedure declarations I.  #
+BEGIN INT x = 10, y = 20, i = 2;
+      PROC xxx = (INT arg) INT: 10;
+      PROC yyy = (INT arg) INT: 20;
+      PROC zzz = (INT arg) INT: 30;
+      PROC(INT)INT f = IF x > y THEN xxx ELSE zzz FI,
+                   g = CASE i IN xxx, yyy, zzz ESAC;
+      PROC(INT)INT h := IF x < y THEN xxx ELSE yyy FI;
+      ASSERT (f (100) = 30);
+      ASSERT (g (200) = 20);
+      ASSERT (h (300) = 10);
+      h := yyy;
+      ASSERT (h (300) = 20)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3a.a68
new file mode 100644
index 00000000000..45efc9c8834
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3a.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+# Using the factorial function in a program #
+BEGIN PROC f = (INT n) INT:
+      BEGIN INT product := 1;
+            FOR i TO n DO product *:= i OD;
+            product
+      END;
+      ASSERT (f(0) = 1);
+      ASSERT (f(1) = 1);
+      ASSERT (f(2) = 2);
+      ASSERT (f(3) = 6)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3c.a68
new file mode 100644
index 00000000000..fcd93c85c44
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.3c.a68
@@ -0,0 +1,29 @@
+# { dg-options "-fstropping=upper" }  #
+# Procedure declarations III  #
+BEGIN # From the ALGOL68 Revised Report.  #
+      PROC my char in string = (CHAR c, REF INT i, []CHAR s) BOOL:
+      BEGIN BOOL found := FALSE;
+            FOR k FROM LWB s TO UPB s WHILE NOT found
+            DO (c = s[k] | i := k; found := TRUE) OD;
+            found
+      END;
+      ASSERT ((INT idx := 0;
+               my char in string ("o", idx, "foo")
+               ANDTH idx = 2));
+      ASSERT (my char in string ("x", LOC INT, "foo") = FALSE);
+      # Swapping function.  #
+      PROC swap = (REF INT a, b) VOID:
+         (INT r = a; a := b; b := r);
+      ASSERT ((INT x := 1, y := 2;
+               swap (x, y);
+               x = 2 AND y = 1));
+      # Euclid's algorithm.  #
+      PROC hcf = (INT m, n) INT:
+      BEGIN INT a := m, b := n;
+            IF a < b THEN swap (a, b) FI;
+            WHILE b /= 0
+            DO INT c = b; b := a MOD b; a := c OD;
+            a
+      END;
+      ASSERT (hcf (10, 20) = 10)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.5a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.5a.a68
new file mode 100644
index 00000000000..4f61bf02a23
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-5.1.5a.a68
@@ -0,0 +1,19 @@
+# { dg-options "-fstropping=upper" }  #
+# Recursive procedures.  #
+BEGIN PROC f = (INT m, n) INT:
+         IF n = 0
+         THEN m
+         ELIF m < n
+         THEN f (n, m)
+         ELSE m * f (m % n, n - 1) + n * f (m - 1, n)
+         FI;
+      f (10, 20);
+      PROC a = (INT m, n) INT:
+         IF m = 0
+         THEN  + 1
+         ELIF n = 0
+         THEN a (m - 1, 1)
+         ELSE a (m - 1, a (m, n - 1))
+         FI;
+      a (10, 20)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2a.a68
new file mode 100644
index 00000000000..b2bed32b302
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2a.a68
@@ -0,0 +1,5 @@
+# { dg-options "-fstropping=upper" }  #
+# Using AND and OR  #
+BEGIN ASSERT ((2r111 AND 2r101) = 2r101);
+      ASSERT ((16rff AND 2r111) = 16r7)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2b.a68
new file mode 100644
index 00000000000..b9a4730b9d0
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2b.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Comparing objects of mode BITS  #
+BEGIN ASSERT (2r1010 <= 2r1110);
+      ASSERT (4r331 >= 8r74);
+      ASSERT (NOT (2r100 >= 2r011))
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2c.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2c.a68
new file mode 100644
index 00000000000..79bfc97d9b4
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-6.2.2c.a68
@@ -0,0 +1,6 @@
+# { dg-options "-fstropping=upper" }  #
+# Using BIN  #
+BEGIN ASSERT (BIN 7 = 2r111);
+      INT i = 22;
+      ASSERT ((BITS b = BIN i; ABS (b SHL 3) + ABS (b SHL 1)) = 220)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1a.a68
new file mode 100644
index 00000000000..efd948be807
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1a.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Declarations of flexible names.  #
+BEGIN FLEX[1:0]INT n;
+      ASSERT (LWB n = 1 AND UPB n = 0 AND ELEMS n = 0);
+      FLEX[4,6]INT p;
+      ASSERT (1 LWB p = 1 AND 1 UPB p = 4 AND 1 ELEMS p = 4
+              AND 2 LWB p = 1 AND 2 UPB p = 6 AND 2 ELEMS p = 6)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1b.a68
new file mode 100644
index 00000000000..3360c5eabc2
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.1b.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+# Null row displays an string denotations.  #
+BEGIN FLEX[4]INT a, FLEX[4,6]INT b, FLEX[10]CHAR c;
+      a := ();
+      ASSERT (LWB a = 1 AND UPB a = 0);
+      b := ((),());
+      ASSERT (1 LWB b = 1 AND 1 UPB b = 2
+              AND 2 LWB b = 1 AND 2 UPB b = 0);
+      c := ();
+      c := ""
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.3a.a68
new file mode 100644
index 00000000000..b1bfdf737ca
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.1.3a.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Transient references and declarations.  #
+BEGIN FLEX[4,6]INT p;
+      []INT q1 = p[3,]; # Transient name is dereferenced giving []INT  #
+      REF FLEX[,]INT q5 = p; # p and q5 are different ways of accessing
+                               the same name.  #
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.2a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.2a.a68
new file mode 100644
index 00000000000..688bcac00ec
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.2a.a68
@@ -0,0 +1,11 @@
+# { dg-options "-fstropping=upper" }  #
+# Virtual declarers.  #
+BEGIN REF[]INT s;
+      STRUCT ([10]INT a, [4]REF[]INT b) c;
+      UNION (REF FLEX[]INT, PROC(INT)INT) f;
+      FLEX[4][3]INT a;
+      REF FLEX[][]INT aa = LOC FLEX[4][3]INT;
+      [4]FLEX[3]INT b;
+      REF[]FLEX[]INT bb = LOC[4]FLEX[3]INT;
+      SKIP
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6a.a68
new file mode 100644
index 00000000000..1fbf6a3772e
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6a.a68
@@ -0,0 +1,23 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN INT n := 3, m := 3;
+      REF INT w := n, z := n, REF INT y = n;
+      # Delivers TRUE since y and n deliver the same variable of mode REF
+        INT.  No coercions take place.
+      #
+      ASSERT (y :=: n);
+      # Delivers TRUE.  here w is dereferenced to yield n.  The right
+        hand side is taken to be strong since dereferencing cannot
+        occur in a soft position.
+      #
+      ASSERT (n :=: w);
+      # Similarly delivers TRUE.  Strong position is lhs.  #
+      ASSERT (w :=: n);
+      # Delivers TRUE.  No coercions take place.  #
+      ASSERT (y ISNT m);
+      # Delivers true.  w gets coerced to REF INT due to the strong
+        context introduced by the cast.  No further coercions take place.
+      #
+      ASSERT (REF INT (w) :=: z);
+      # Delives true.  No coercions take place.  #
+      ASSERT (w :/=: z)
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6b.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6b.a68
new file mode 100644
index 00000000000..479339d7485
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.3.6b.a68
@@ -0,0 +1,12 @@
+# { dg-options "-fstropping=upper" }  #
+BEGIN
+   [3]INT a := (1,2,3);
+
+   CO Comparing transient or flex names using an identity relation is
+      undefined.  Therefore, a[2:3] :=: a[2:3] is undefined.
+   CO
+
+   # But the following are defined.  #
+   ASSERT (a[1] :=: a[1]);
+   ASSERT (a[1] :/=: a[2])
+END
diff --git a/gcc/testsuite/algol68/execute/mcgt/mcgt-7.5.3a.a68 
b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.5.3a.a68
new file mode 100644
index 00000000000..dfb8cd40460
--- /dev/null
+++ b/gcc/testsuite/algol68/execute/mcgt/mcgt-7.5.3a.a68
@@ -0,0 +1,8 @@
+# { dg-options "-fstropping=upper" }  #
+# Declarations involving global generators.  #
+BEGIN REF REAL xx;
+      BEGIN REF REAL x = HEAP REAL := 4;
+            xx := x
+      END;
+      ASSERT (xx = 4)
+END
-- 
2.30.2

Reply via email to