aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c4/c460006.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c4/c460006.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c4/c460006.a378
1 files changed, 0 insertions, 378 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c4/c460006.a b/gcc/testsuite/ada/acats/tests/c4/c460006.a
deleted file mode 100644
index 99968847b9b..00000000000
--- a/gcc/testsuite/ada/acats/tests/c4/c460006.a
+++ /dev/null
@@ -1,378 +0,0 @@
--- C460006.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 a view conversion to a tagged type is permitted in the
--- prefix of a selected component, an object renaming declaration, and
--- (if the operand is a variable) on the left side of an assignment
--- statement. Check that such a renaming or assignment does not change
--- the tag of the operand.
---
--- Check that, for a view conversion of a tagged type, each
--- nondiscriminant component of the new view denotes the matching
--- component of the operand object. Check that reading the value of the
--- view yields the result of converting the value of the operand object
--- to the target subtype.
---
--- TEST DESCRIPTION:
--- The fact that the tag of an object is not changed is verified by
--- making calls to primitive operations which in turn make (re)dispatching
--- calls, and confirming that the proper bodies are executed.
---
--- Selected components are checked in three contexts: as the object name
--- in an object renaming declaration, as the left operand of an inequality
--- operation, and as the left side of an assignment statement.
---
--- View conversions of an object of a 2nd level type extension are
--- renamed as objects of an ancestor type and of a class-wide type. In
--- one case the operand of the conversion is itself a renaming of an
--- object.
---
--- View conversions of an object of a 2nd level type extension are
--- checked for equality with record aggregates of various ancestor types.
--- In one case, the view conversion is to a class-wide type, and it is
--- checked for equality with the result of a class-wide function with
--- the following structure:
---
--- function F return T'Class is
--- A : DDT := Expected_Value;
--- X : T'Class := T(A);
--- begin
--- return X;
---
--- end F;
---
--- ...
---
--- Var : DDT := Expected_Value;
---
--- if (T'Class(Var) /= F) then -- Condition should yield FALSE.
--- FAIL;
--- end if;
---
--- The view conversion to which X is initialized does not affect the
--- value or tag of the operand; the tag of X is that of type DDT (not T),
--- and the components are those of A. The result of this function
--- should equal the value of an object of type DDT initialized to the
--- same value as F.A.
---
--- To check that assignment to a view conversion does not change the tag
--- of the operand, an assignment is made to a conversion of an object,
--- and the object is then passed as an actual to a dispatching operation.
--- Conversions to both specific and class-wide types are checked.
---
---
--- CHANGE HISTORY:
--- 20 Jul 95 SAIC Initial prerelease version.
--- 24 Apr 96 SAIC Added type conversions.
---
---!
-
-package C460006_0 is
-
- type Call_ID_Kind is (None, Parent_Outer, Parent_Inner,
- Child_Outer, Child_Inner,
- Grandchild_Outer, Grandchild_Inner);
-
- type Root_Type is abstract tagged record
- First_Call : Call_ID_Kind := None;
- Second_Call : Call_ID_Kind := None;
- end record;
-
- procedure Inner_Proc (X : in out Root_Type) is abstract;
- procedure Outer_Proc (X : in out Root_Type) is abstract;
-
-end C460006_0;
-
-
- --==================================================================--
-
-
-package C460006_0.C460006_1 is
-
- type Parent_Type is new Root_Type with record
- C1 : Integer := 0;
- end record;
-
- procedure Inner_Proc (X : in out Parent_Type);
- procedure Outer_Proc (X : in out Parent_Type);
-
-end C460006_0.C460006_1;
-
-
- --==================================================================--
-
-
-package body C460006_0.C460006_1 is
-
- procedure Inner_Proc (X : in out Parent_Type) is
- begin
- X.Second_Call := Parent_Inner;
- end Inner_Proc;
-
- -------------------------------------------------
- procedure Outer_Proc (X : in out Parent_Type) is
- begin
- X.First_Call := Parent_Outer;
- Inner_Proc ( Parent_Type'Class(X) );
- end Outer_Proc;
-
-end C460006_0.C460006_1;
-
-
- --==================================================================--
-
-
-package C460006_0.C460006_1.C460006_2 is
-
- type Child_Type is new Parent_Type with record
- C2 : String(1 .. 5) := "-----";
- end record;
-
- procedure Inner_Proc (X : in out Child_Type);
- procedure Outer_Proc (X : in out Child_Type);
-
-end C460006_0.C460006_1.C460006_2;
-
-
- --==================================================================--
-
-
-package body C460006_0.C460006_1.C460006_2 is
-
- procedure Inner_Proc (X : in out Child_Type) is
- begin
- X.Second_Call := Child_Inner;
- end Inner_Proc;
-
- -------------------------------------------------
- procedure Outer_Proc (X : in out Child_Type) is
- begin
- X.First_Call := Child_Outer;
- Inner_Proc ( Parent_Type'Class(X) );
- end Outer_Proc;
-
-end C460006_0.C460006_1.C460006_2;
-
-
- --==================================================================--
-
-
-package C460006_0.C460006_1.C460006_2.C460006_3 is
-
- type Grandchild_Type is new Child_Type with record
- C3: String(1 .. 5) := "-----";
- end record;
-
- procedure Inner_Proc (X : in out Grandchild_Type);
- procedure Outer_Proc (X : in out Grandchild_Type);
-
-
- function ClassWide_Func return Parent_Type'Class;
-
-
- Grandchild_Value : constant Grandchild_Type := (First_Call => None,
- Second_Call => None,
- C1 => 15,
- C2 => "Hello",
- C3 => "World");
-
-end C460006_0.C460006_1.C460006_2.C460006_3;
-
-
- --==================================================================--
-
-
-package body C460006_0.C460006_1.C460006_2.C460006_3 is
-
- procedure Inner_Proc (X : in out Grandchild_Type) is
- begin
- X.Second_Call := Grandchild_Inner;
- end Inner_Proc;
-
- -------------------------------------------------
- procedure Outer_Proc (X : in out Grandchild_Type) is
- begin
- X.First_Call := Grandchild_Outer;
- Inner_Proc ( Parent_Type'Class(X) );
- end Outer_Proc;
-
- -------------------------------------------------
- function ClassWide_Func return Parent_Type'Class is
- A : Grandchild_Type := Grandchild_Value;
- X : Parent_Type'Class := Parent_Type(A); -- Value of X is still that of A.
- begin
- return X;
- end ClassWide_Func;
-
-end C460006_0.C460006_1.C460006_2.C460006_3;
-
-
- --==================================================================--
-
-
-with C460006_0.C460006_1.C460006_2.C460006_3;
-
-with Report;
-procedure C460006 is
-
- package Root_Package renames C460006_0;
- package Parent_Package renames C460006_0.C460006_1;
- package Child_Package renames C460006_0.C460006_1.C460006_2;
- package Grandchild_Package renames C460006_0.C460006_1.C460006_2.C460006_3;
-
-begin
- Report.Test ("C460006", "Check that a view conversion to a tagged type " &
- "is permitted in the prefix of a selected component, an " &
- "object renaming declaration, and (if the operand is a " &
- "variable) on the left side of an assignment statement. " &
- "Check that such a renaming or assignment does not change " &
- " the tag of the operand");
-
-
- --
- -- Check conversion as prefix of selected component:
- --
-
- Selected_Component_Subtest:
- declare
- use Root_Package, Parent_Package, Child_Package, Grandchild_Package;
-
- Var : Grandchild_Type := Grandchild_Value;
- CW_Var : Parent_Type'Class := Var;
-
- Ren : Integer renames Parent_Type(Var).C1;
-
- begin
- if Ren /= 15 then
- Report.Failed ("Wrong value: selected component in renaming");
- end if;
-
- if Child_Type(Var).C2 /= "Hello" then
- Report.Failed ("Wrong value: selected component in IF");
- end if;
-
- Grandchild_Type(CW_Var).C3(2..4) := "eir";
- if CW_Var /= Parent_Type'Class
- (Grandchild_Type'(None, None, 15, "Hello", "Weird"))
- then
- Report.Failed ("Wrong value: selected component in assignment");
- end if;
- end Selected_Component_Subtest;
-
-
- --
- -- Check conversion in object renaming:
- --
-
- Object_Renaming_Subtest:
- declare
- use Root_Package, Parent_Package, Child_Package, Grandchild_Package;
-
- Var : Grandchild_Type := Grandchild_Value;
- Ren1 : Parent_Type renames Parent_Type(Var);
- Ren2 : Child_Type renames Child_Type(Var);
- Ren3 : Parent_Type'Class renames Parent_Type'Class(Var);
- Ren4 : Parent_Type renames Parent_Type(Ren2); -- Rename of rename.
- begin
- Outer_Proc (Ren1);
- if Ren1 /= (Parent_Outer, Grandchild_Inner, 15) then
- Report.Failed ("Value or tag not preserved by object renaming: Ren1");
- end if;
-
- Outer_Proc (Ren2);
- if Ren2 /= (Child_Outer, Grandchild_Inner, 15, "Hello") then
- Report.Failed ("Value or tag not preserved by object renaming: Ren2");
- end if;
-
- Outer_Proc (Ren3);
- if Ren3 /= Parent_Type'Class
- (Grandchild_Type'(Grandchild_Outer,
- Grandchild_Inner,
- 15,
- "Hello",
- "World"))
- then
- Report.Failed ("Value or tag not preserved by object renaming: Ren3");
- end if;
-
- Outer_Proc (Ren4);
- if Ren4 /= (Parent_Outer, Grandchild_Inner, 15) then
- Report.Failed ("Value or tag not preserved by object renaming: Ren4");
- end if;
- end Object_Renaming_Subtest;
-
-
- --
- -- Check reading view conversion, and conversion as left side of assignment:
- --
-
- View_Conversion_Subtest:
- declare
- use Root_Package, Parent_Package, Child_Package, Grandchild_Package;
-
- Var : Grandchild_Type := Grandchild_Value;
- Specific : Child_Type;
- ClassWide : Parent_Type'Class := Var; -- Grandchild_Type tag.
- begin
- if Parent_Type(Var) /= (None, None, 15) then
- Report.Failed ("View has wrong value: #1");
- end if;
-
- if Child_Type(Var) /= (None, None, 15, "Hello") then
- Report.Failed ("View has wrong value: #2");
- end if;
-
- if Parent_Type'Class(Var) /= ClassWide_Func then
- Report.Failed ("Upward view conversion did not preserve " &
- "extension's components");
- end if;
-
-
- Parent_Type(Specific) := (None, None, 26); -- Assign to view.
- Outer_Proc (Specific); -- Call dispatching op.
-
- if Specific /= (Child_Outer, Child_Inner, 26, "-----") then
- Report.Failed ("Value or tag not preserved by assignment: Specific");
- end if;
-
-
- Parent_Type(ClassWide) := (None, None, 44); -- Assign to view.
- Outer_Proc (ClassWide); -- Call dispatching op.
-
- if ClassWide /= Parent_Type'Class
- (Grandchild_Type'(Grandchild_Outer,
- Grandchild_Inner,
- 44,
- "Hello",
- "World"))
- then
- Report.Failed ("Value or tag not preserved by assignment: ClassWide");
- end if;
- end View_Conversion_Subtest;
-
- Report.Result;
-
-end C460006;