aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c3/c330002.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c3/c330002.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c3/c330002.a326
1 files changed, 0 insertions, 326 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c3/c330002.a b/gcc/testsuite/ada/acats/tests/c3/c330002.a
deleted file mode 100644
index 1403d5557b1..00000000000
--- a/gcc/testsuite/ada/acats/tests/c3/c330002.a
+++ /dev/null
@@ -1,326 +0,0 @@
--- C330002.A
---
--- 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.
---*
---
--- OBJECTIVE:
--- Check that if a subtype indication of a variable object defines an
--- indefinite subtype, then there is an initialization expression.
--- Check that the object remains so constrained throughout its lifetime.
--- Check for cases of tagged record, arrays and generic formal type.
---
--- TEST DESCRIPTION:
--- An indefinite subtype is either:
--- a) An unconstrained array subtype.
--- b) A subtype with unknown discriminants (this includes class-wide
--- types).
--- c) A subtype with unconstrained discriminants without defaults.
---
--- Declare tagged types with unconstrained discriminants without
--- defaults. Declare an unconstrained array. Declare a generic formal
--- type with an unknown discriminant and a formal object of this type.
--- In the generic package, declare an object of the formal type using
--- the formal object as its initial value. In the main program,
--- declare objects of tagged types. Instantiate the generic package.
--- The test checks that Constraint_Error is raised if an attempt is
--- made to change bounds as well as discriminants of the objects of the
--- indefinite subtypes.
---
---
--- CHANGE HISTORY:
--- 01 Nov 95 SAIC Initial prerelease version.
--- 27 Jul 96 SAIC Modified test description & Report.Test. Added
--- code to prevent dead variable optimization.
---
---!
-
-package C330002_0 is
-
- subtype Small_Num is Integer range 1 .. 20;
-
- -- Types with unconstrained discriminants without defaults.
-
- type Tag_Type (Disc : Small_Num) is tagged
- record
- S : String (1 .. Disc);
- end record;
-
- function Tag_Value return Tag_Type;
-
- procedure Assign_Tag (A : out Tag_Type);
-
- procedure Avoid_Optimization_and_Fail (P : Tag_Type; Msg : String);
-
- ---------------------------------------------------------------------
- -- An unconstrained array type.
-
- type Array_Type is array (Positive range <>) of Integer;
-
- function Array_Value return Array_Type;
-
- procedure Assign_Array (A : out Array_Type);
-
- ---------------------------------------------------------------------
- generic
- -- Type with an unknown discriminant.
- type Formal_Type (<>) is private;
- FT_Obj : Formal_Type;
- package Gen is
- Gen_Obj : Formal_Type := FT_Obj;
- end Gen;
-
-end C330002_0;
-
- --==================================================================--
-
-with Report;
-package body C330002_0 is
-
- procedure Assign_Tag (A : out Tag_Type) is
- begin
- A := (3, "Bye");
- end Assign_Tag;
-
- ----------------------------------------------------------------------
- procedure Avoid_Optimization_and_Fail (P : Tag_Type; Msg : String) is
- Default : Tag_Type := (1, "!"); -- Unique value.
- begin
- if P = Default then -- Both If branches can't do the same thing.
- Report.Failed (Msg & ": Constraint_Error not raised");
- else -- Subtests should always select this path.
- Report.Failed ("Constraint_Error not raised " & Msg);
- end if;
- end Avoid_Optimization_and_Fail;
-
- ----------------------------------------------------------------------
- function Tag_Value return Tag_Type is
- TO : Tag_Type := (4 , "ACVC");
- begin
- return TO;
- end Tag_Value;
-
- ----------------------------------------------------------------------
- function Array_Value return Array_Type is
- IA : Array_Type := (20, 31);
- begin
- return IA;
- end Array_Value;
-
- ----------------------------------------------------------------------
- procedure Assign_Array (A : out Array_Type) is
- begin
- A := (84, 36);
- end Assign_Array;
-
-end C330002_0;
-
- --==================================================================--
-
-with Report;
-with C330002_0;
-use C330002_0;
-
-procedure C330002 is
-
-begin
- Report.Test ("C330002", "Check that if a subtype indication of a " &
- "variable object defines an indefinite subtype, then " &
- "there is an initialization expression. Check that " &
- "the object remains so constrained throughout its " &
- "lifetime. Check that Constraint_Error is raised " &
- "if an attempt is made to change bounds as well as " &
- "discriminants of the objects of the indefinite " &
- "subtypes. Check for cases of tagged record and generic " &
- "formal types");
-
- TagObj_Block:
- declare
- TObj_ByAgg : Tag_Type := (5, "Hello"); -- Initial assignment is
- -- aggregate.
- TObj_ByObj : Tag_Type := TObj_ByAgg; -- Initial assignment is
- -- an object.
- TObj_ByFunc : Tag_Type := Tag_Value; -- Initial assignment is
- -- function return value.
- Ren_Obj : Tag_Type renames TObj_ByAgg;
-
- begin
-
- begin
- if (TObj_ByAgg.Disc /= 5) or (TObj_ByAgg.S /= "Hello") then
- Report.Failed ("Wrong initial values for TObj_ByAgg");
- end if;
-
- TObj_ByAgg := (2, "Hi"); -- C_E, can't change the
- -- value of the discriminant.
-
- Avoid_Optimization_and_Fail (TObj_ByAgg, "Subtest 1");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 1");
- end;
-
-
- begin
- Assign_Tag (Ren_Obj); -- C_E, can't change the
- -- value of the discriminant.
-
- Avoid_Optimization_and_Fail (Ren_Obj, "Subtest 2");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 2");
- end;
-
-
- begin
- if (TObj_ByObj.Disc /= 5) or (TObj_ByObj.S /= "Hello") then
- Report.Failed ("Wrong initial values for TObj_ByObj");
- end if;
-
- TObj_ByObj := (3, "Bye"); -- C_E, can't change the
- -- value of the discriminant.
-
- Avoid_Optimization_and_Fail (TObj_ByObj, "Subtest 3");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 3");
- end;
-
-
- begin
- if (TObj_ByFunc.Disc /= 4) or (TObj_ByFunc.S /= "ACVC") then
- Report.Failed ("Wrong initial values for TObj_ByFunc");
- end if;
-
- TObj_ByFunc := (5, "Aloha"); -- C_E, can't change the
- -- value of the discriminant.
-
- Avoid_Optimization_and_Fail (TObj_ByFunc, "Subtest 4");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 4");
- end;
-
- end TagObj_Block;
-
-
- ArrObj_Block:
- declare
- Arr_Const : constant Array_Type
- := (9, 7, 6, 8);
- Arr_ByAgg : Array_Type -- Initial assignment is
- := (10, 11, 12); -- aggregate.
- Arr_ByFunc : Array_Type -- Initial assignment is
- := Array_Value; -- function return value.
- Arr_ByObj : Array_Type -- Initial assignment is
- := Arr_ByAgg; -- object.
-
- Arr_Obj : array (Positive range <>) of Integer
- := (1, 2, 3, 4, 5);
- begin
-
- begin
- if (Arr_Const'First /= 1) or (Arr_Const'Last /= 4) then
- Report.Failed ("Wrong bounds for Arr_Const");
- end if;
-
- if (Arr_ByAgg'First /= 1) or (Arr_ByAgg'Last /= 3) then
- Report.Failed ("Wrong bounds for Arr_ByAgg");
- end if;
-
- if (Arr_ByFunc'First /= 1) or (Arr_ByFunc'Last /= 2) then
- Report.Failed ("Wrong bounds for Arr_ByFunc");
- end if;
-
- if (Arr_ByObj'First /= 1) or (Arr_ByObj'Last /= 3) then
- Report.Failed ("Wrong bounds for Arr_ByObj");
- end if;
-
- Assign_Array (Arr_ByObj); -- C_E, Arr_ByObj bounds are
- -- 1..3.
-
- Report.Failed ("Constraint_Error not raised - Subtest 5");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 5");
- end;
-
-
- begin
- if (Arr_Obj'First /= 1) or (Arr_Obj'Last /= 5) then
- Report.Failed ("Wrong bounds for Arr_Obj");
- end if;
-
- for I in 0 .. 5 loop
- Arr_Obj (I + 1) := I + 5; -- C_E, Arr_Obj bounds are
- end loop; -- 1..5.
-
- Report.Failed ("Constraint_Error not raised - Subtest 6");
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 6");
- end;
-
- end ArrObj_Block;
-
-
- GenericObj_Block:
- declare
- type Rec (Disc : Small_Num) is
- record
- S : Small_Num := Disc;
- end record;
-
- Rec_Obj : Rec := (2, 2);
- package IGen is new Gen (Rec, Rec_Obj);
-
- begin
- IGen.Gen_Obj := (3, 3); -- C_E, can't change the
- -- value of the discriminant.
-
- Report.Failed ("Constraint_Error not raised - Subtest 7");
-
- -- Next line prevents dead assignment.
- Report.Comment ("Disc is" & Integer'Image (IGen.Gen_Obj.Disc));
-
- exception
- when Constraint_Error => null; -- Exception is expected.
- when others =>
- Report.Failed ("Unexpected exception - Subtest 7");
-
- end GenericObj_Block;
-
- Report.Result;
-
-end C330002;