diff gcc/testsuite/ada/acats/tests/c3/c36104b.ada @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/ada/acats/tests/c3/c36104b.ada	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,421 @@
+-- C36104B.ADA
+
+--                             Grant of Unlimited Rights
+--
+--     Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,
+--     F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained 
+--     unlimited rights in the software and documentation contained herein.
+--     Unlimited rights are defined in DFAR 252.227-7013(a)(19).  By making 
+--     this public release, the Government intends to confer upon all 
+--     recipients unlimited rights  equal to those held by the Government.  
+--     These rights include rights to use, duplicate, release or disclose the 
+--     released technical data and computer software in whole or in part, in 
+--     any manner and for any purpose whatsoever, and to have or permit others 
+--     to do so.
+--
+--                                    DISCLAIMER
+--
+--     ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR
+--     DISCLOSED ARE AS IS.  THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED 
+--     WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE
+--     SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE 
+--     OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A
+--     PARTICULAR PURPOSE OF SAID MATERIAL.
+--*
+-- CHECK THAT CONSTRAINT_ERROR IS RAISED OR NOT, AS APPROPRIATE,
+-- DURING DISCRETE_RANGE ELABORATIONS/EVALUATIONS IN LOOPS,
+-- ARRAY_TYPE_DEFINITIONS, ARRAY AGGREGATES, SLICES,
+-- AND INDEX CONSTRAINTS IN OBJECT AND TYPE DECLARATIONS, WHERE
+-- AN EXPLICIT (SUB)TYPE IS INCLUDED IN EACH DISCRETE_RANGE.
+-- MEMBERSHIP OPERATORS ARE CHECKED HERE, ALSO, TO ENSURE THAT
+-- EXCEPTIONS ARE NOT RAISED FOR NULL RANGES.
+-- ONLY DYNAMIC CASES ARE CHECKED HERE.
+
+-- DAT 2/3/81
+-- JRK 2/25/81
+-- L.BROWN  7/15/86  1) ADDED ACCESS TYPES.
+--                   2) DELETED "NULL INDEX RANGE, CONSTRAINT_ERROR
+--                      RAISED" SECTION.
+--                   3) MADE USE OF DYNAMIC-RESULT FUNCTIONS.
+--                   4) DELETED ALL REFERENCES TO CASE STATEMENT CHOICES
+--                      AND VARIANT PART CHOICES IN THE ABOVE COMMENT.
+-- EDS      7/16/98  AVOID OPTIMIZATION
+
+WITH REPORT;
+PROCEDURE C36104B IS
+
+     USE REPORT;
+
+     TYPE WEEK IS (SSUN, SMON, STUE, SWED, STHU, SFRI, SSAT);
+     SUN : WEEK := WEEK'VAL(IDENT_INT(0));
+     MON : WEEK := WEEK'VAL(IDENT_INT(1));
+     TUE : WEEK := WEEK'VAL(IDENT_INT(2));
+     WED : WEEK := WEEK'VAL(IDENT_INT(3));
+     THU : WEEK := WEEK'VAL(IDENT_INT(4));
+     FRI : WEEK := WEEK'VAL(IDENT_INT(5));
+     SAT : WEEK := WEEK'VAL(IDENT_INT(6));
+     TYPE WEEK_ARRAY IS ARRAY (WEEK RANGE <>) OF WEEK;
+     SUBTYPE WORK_WEEK IS WEEK RANGE MON .. FRI;
+     SUBTYPE MID_WEEK IS WORK_WEEK RANGE TUE .. THU;
+
+     TYPE INT_10 IS NEW INTEGER RANGE -10 .. 10;
+     TYPE I_10 IS NEW INT_10;
+     SUBTYPE I_5 IS I_10 RANGE I_10(IDENT_INT(-5)) ..
+                               I_10(IDENT_INT(5));
+     TYPE I_5_ARRAY IS ARRAY (I_5 RANGE <>) OF I_5;
+
+     FUNCTION F(DAY : WEEK) RETURN WEEK IS
+        BEGIN
+          RETURN DAY;
+        END;
+
+BEGIN
+     TEST ("C36104B", "CONSTRAINT_ERROR IS RAISED OR NOT IN DYNAMIC "
+          & "DISCRETE_RANGES WITH EXPLICIT TYPE_MARKS");
+
+     -- NON-NULL RANGES, CONSTRAINT_ERROR RAISED.
+
+     BEGIN
+          DECLARE
+               TYPE A IS ARRAY (I_5 RANGE 0 .. 6) OF I_5;
+               -- ABOVE DECLARATION RAISES CONSTRAINT_ERROR.
+          BEGIN
+               DECLARE
+                  -- DEFINE AN OBJECT OF TYPE A AND USE IT TO AVOID 
+                  -- OPTIMIZATION OF SUBTYPE
+                  A1 : A := (A'RANGE => I_5(IDENT_INT(1)));
+               BEGIN
+                  FAILED ("CONSTRAINT_ERROR NOT RAISED 1 " & 
+                          I_5'IMAGE(A1(1)) );  --USE A1
+               END;
+          EXCEPTION
+             --MAKE SURE THAT CONSTRAINT_ERROR FROM ABOVE STATEMENTS
+             --REPORT FAILED.
+             WHEN OTHERS => FAILED ("UNHANDLED EXCEPTION RAISED 1");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 1");
+     END;
+
+     BEGIN
+          FOR I IN MID_WEEK RANGE MON .. MON LOOP
+
+               IF EQUAL(2,2)  THEN
+                    SAT := SSAT;
+               END IF;
+
+          END LOOP;
+          FAILED ("CONSTRAINT_ERROR NOT RAISED 3");
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 3");
+     END;
+
+     BEGIN
+          DECLARE
+               TYPE P IS ACCESS I_5_ARRAY (0 .. 6);
+               -- ABOVE DECLARATION RAISES CONSTRAINT_ERROR.
+          BEGIN
+               DECLARE
+                  TYPE PA IS NEW P;
+                  -- DEFINE AN OBJECT OF TYPE PA AND USE IT TO AVOID 
+                  -- OPTIMIZATION OF TYPE
+                  PA1 : PA :=NEW I_5_ARRAY'(0.. I_5(IDENT_INT(6)) => 
+                                            I_5(IDENT_INT(1)));
+               BEGIN
+                  FAILED ("CONSTRAINT_ERROR NOT RAISED 4 " & 
+                          I_5'IMAGE(PA1(1))); --USE PA1
+               END;
+          EXCEPTION
+             WHEN OTHERS => FAILED ("UNHANDLED EXCEPTION RAISED 4");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 4");
+     END;
+
+     DECLARE
+          W : WEEK_ARRAY (MID_WEEK);
+     BEGIN
+          W := (MID_WEEK RANGE MON .. WED => WED);
+          -- CONSTRAINT_ERROR RAISED.
+          BEGIN
+               FAILED ("CONSTRAINT_ERROR NOT RAISED 7 " & 
+                       MID_WEEK'IMAGE(W(WED))); --USE W
+          EXCEPTION
+               WHEN OTHERS => FAILED ("UNHANDLED EXCEPTION RAISED 7");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 7");
+     END;
+
+     DECLARE
+          W : WEEK_ARRAY (WORK_WEEK);
+     BEGIN
+          W := (W'RANGE => WED); -- OK.
+          W (MON .. WED) := W (MID_WEEK RANGE MON .. WED); -- EXCEPTION.
+          BEGIN
+               FAILED ("CONSTRAINT_ERROR NOT RAISED 8 " & 
+                       MID_WEEK'IMAGE(W(WED))); --USE W
+          EXCEPTION
+               WHEN OTHERS => FAILED ("UNHANDLED EXCEPTION RAISED 8");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 8");
+     END;
+
+     BEGIN
+          DECLARE
+               W : WEEK_ARRAY (MID_WEEK RANGE MON .. FRI);
+               -- ELABORATION OF ABOVE RAISES CONSTRAINT_ERROR.
+          BEGIN
+               W(WED) := THU;        -- OK.
+               FAILED ("CONSTRAINT_ERROR NOT RAISED 9 " &
+                       WEEK'IMAGE(W(WED)));   -- USE W
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 9");
+     END;
+
+     BEGIN
+          DECLARE
+               TYPE W IS NEW WEEK_ARRAY (MID_WEEK RANGE SUN .. WED);
+               -- RAISES CONSTRAINT_ERROR.
+          BEGIN
+               DECLARE
+                    X : W;              -- OK.
+               BEGIN
+                    X(TUE) := THU;   -- OK.
+                    FAILED ("CONSTRAINT_ERROR NOT RAISED 10 " &
+                            WEEK'IMAGE(X(TUE)));   -- USE X
+               END;
+          EXCEPTION
+               WHEN OTHERS =>
+                    FAILED ("DID NOT RAISE CONSTRAINT_ERROR AT PROPER PLACE");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 10");
+     END;
+
+     BEGIN
+          DECLARE
+               SUBTYPE W IS WEEK_ARRAY (MID_WEEK RANGE MON .. THU);
+               -- RAISES CONSTRAINT_ERROR.
+          BEGIN
+               DECLARE
+                    T : W;               -- OK.
+               BEGIN
+                    T(TUE) := THU;    -- OK.
+                    FAILED ("CONSTRAINT_ERROR NOT RAISED 11 " &
+                            WEEK'IMAGE(T(TUE)));
+               END;
+          EXCEPTION
+               WHEN OTHERS =>
+                    FAILED ("DID NOT RAISE CONSTRAINT_ERROR AT PROPER PLACE");
+          END;
+     EXCEPTION
+          WHEN CONSTRAINT_ERROR => NULL;
+          WHEN OTHERS =>
+               FAILED ("WRONG EXCEPTION RAISED 11");
+     END;
+
+     -- NULL DISCRETE/INDEX RANGES, EXCEPTION NOT RAISED.
+
+     BEGIN
+          DECLARE
+               TYPE A IS ARRAY (I_5 RANGE I_5(IDENT_INT(-5)) .. -6) OF I_5;
+               A1 : A;
+          BEGIN
+               IF A1'FIRST /= I_5(IDENT_INT(-5)) THEN
+                    FAILED ("'FIRST OF NULL ARRAY INCORRECT");
+               END IF;
+          END;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 1");
+     END;
+
+     BEGIN
+          FOR I IN MID_WEEK RANGE SAT .. SUN LOOP
+               
+               IF EQUAL(2,2)  THEN
+                    TUE := STUE;
+               END IF;
+
+          END LOOP;
+          FOR I IN MID_WEEK RANGE FRI .. WED LOOP
+               
+               IF EQUAL(2,2)  THEN
+                    MON := SMON;
+               END IF;
+
+          END LOOP;
+          FOR I IN MID_WEEK RANGE MON .. SUN LOOP
+               
+               IF EQUAL(3,3)  THEN
+                    WED := SWED;
+               END IF;
+
+          END LOOP;
+          FOR I IN I_5 RANGE 10 .. -10 LOOP
+
+               IF EQUAL(2,2)  THEN
+                    TUE := STUE;
+               END IF;
+
+          END LOOP;
+          FOR I IN I_5 RANGE 10 .. 9 LOOP
+
+               IF EQUAL(2,2)  THEN
+                    THU := STHU;
+               END IF;
+
+          END LOOP;
+          FOR I IN I_5 RANGE -10 .. -11 LOOP
+
+               IF EQUAL(2,2)  THEN
+                    SAT := SSAT;
+               END IF;
+
+          END LOOP;
+          FOR I IN I_5 RANGE -10 .. -20 LOOP
+
+               IF EQUAL(2,2)  THEN
+                    SUN := SSUN;
+               END IF;
+
+          END LOOP;
+          FOR I IN I_5 RANGE 6 .. 5 LOOP
+
+               IF EQUAL(2,2)  THEN
+                    MON := SMON;
+               END IF;
+
+          END LOOP;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 3");
+     END;
+
+     BEGIN
+          DECLARE
+               TYPE P IS ACCESS I_5_ARRAY (I_5(IDENT_INT(-5)) .. -6);
+               PA1 : P := NEW I_5_ARRAY (I_5(IDENT_INT(-5)) .. -6);
+          BEGIN
+               IF PA1'LENGTH /= IDENT_INT(0) THEN
+                    FAILED ("'LENGTH OF NULL ARRAY INCORRECT");
+               END IF;
+          END;
+     EXCEPTION
+          WHEN OTHERS =>
+               FAILED ("EXCEPTION RAISED 5");
+     END;
+
+     DECLARE
+          TYPE NARR IS ARRAY(INTEGER RANGE <>) OF INTEGER;
+          SUBTYPE SNARR IS INTEGER RANGE 1 .. 2;
+          W : NARR(SNARR) := (1,2);
+     BEGIN
+          IF W = (SNARR RANGE IDENT_INT(4) .. 2 => 5) THEN
+               FAILED("EVALUATION OF EXPRESSION IS INCORRECT");
+          END IF;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 7");
+     END;
+
+     DECLARE
+          W : WEEK_ARRAY (MID_WEEK);
+     BEGIN
+          W := (W'RANGE => WED); -- OK.
+          W (TUE .. MON) := W (MID_WEEK RANGE MON .. SUN);
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 8");
+     END;
+
+     BEGIN
+          DECLARE
+               W : WEEK_ARRAY (MID_WEEK RANGE MON .. SUN);
+          BEGIN
+
+               IF EQUAL(W'LENGTH,0)  THEN
+                    TUE := STUE;
+               END IF;
+
+          END;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 9");
+     END;
+
+     BEGIN
+          DECLARE
+               TYPE W IS NEW WEEK_ARRAY (MID_WEEK RANGE TUE .. MON);
+          BEGIN
+
+               IF EQUAL(W'LENGTH,0)  THEN
+                    MON := SMON;
+               END IF;
+
+          END;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 10");
+     END;
+
+     BEGIN
+          DECLARE
+               SUBTYPE W IS WEEK_ARRAY (MID_WEEK RANGE TUE .. MON);
+          BEGIN
+
+               IF EQUAL(W'LENGTH,0)  THEN
+                    WED := SWED;
+               END IF;
+
+          END;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 12");
+     END;
+
+     -- NULL MEMBERSHIP RANGES, EXCEPTION NOT RAISED.
+
+     BEGIN
+          IF F(SUN) IN  SAT .. SUN
+          OR SAT IN  FRI .. WED
+          OR F(WED) IN  THU .. TUE
+          OR THU IN  MON .. SUN
+          OR F(FRI) IN  SAT .. FRI
+          OR WED IN  FRI .. MON
+          THEN
+               FAILED ("INCORRECT 'IN' EVALUATION 1");
+          END IF;
+
+          IF IDENT_INT(0) IN  10 .. IDENT_INT(-10)
+          OR 0 IN  IDENT_INT(10) .. 9
+          OR IDENT_INT(0) IN  IDENT_INT(-10) .. -11
+          OR 0 IN  -10 .. IDENT_INT(-20) 
+          OR IDENT_INT(0) IN  6 .. IDENT_INT(5)
+          OR 0 IN  5 .. IDENT_INT(3)
+          OR IDENT_INT(0) IN  7 .. IDENT_INT(3)
+          THEN
+               FAILED ("INCORRECT 'IN' EVALUATION 2");
+          END IF;
+
+          IF F(WED) NOT IN  THU .. TUE
+          AND IDENT_INT(0) NOT IN  IDENT_INT(4) .. -4
+          THEN NULL;
+          ELSE FAILED ("INCORRECT 'NOT IN' EVALUATION");
+          END IF;
+     EXCEPTION
+          WHEN OTHERS => FAILED ("EXCEPTION RAISED 52");
+     END;
+
+     RESULT;
+END C36104B;