aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c3/c390007.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c3/c390007.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c3/c390007.a374
1 files changed, 0 insertions, 374 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c3/c390007.a b/gcc/testsuite/ada/acats/tests/c3/c390007.a
deleted file mode 100644
index 46f59f66c56..00000000000
--- a/gcc/testsuite/ada/acats/tests/c3/c390007.a
+++ /dev/null
@@ -1,374 +0,0 @@
--- C390007.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 the tag of an object of a tagged type is preserved by
--- type conversion and parameter passing.
---
--- TEST DESCRIPTION:
--- The fact that the tag of an object is not changed is verified by
--- making dispatching calls to primitive operations, and confirming that
--- the proper body is executed. Objects of both specific and class-wide
--- types are checked.
---
--- The dispatching calls are made in two contexts. The first is a
--- straightforward dispatching call made from within a class-wide
--- operation. The second is a redispatch from within a primitive
--- operation.
---
--- For the parameter passing case, the initial class-wide and specific
--- objects are passed directly in calls to the class-wide and primitive
--- operations. The redispatch is accomplished by initializing a local
--- class-wide object in the primitive operation to the value of the
--- formal parameter, and using the local object as the actual in the
--- (re)dispatching call.
---
--- For the type conversion case, the initial class-wide object is assigned
--- a view conversion of an object of a specific type:
---
--- type T is tagged ...
--- type DT is new T with ...
---
--- A : DT;
--- B : T'Class := T(A); -- Despite conversion, tag of B is that of DT.
---
--- The class-wide object is then passed directly in calls to the
--- class-wide and primitive operations. For the initial object of a
--- specific type, however, a view conversion of the object is passed,
--- forcing a non-dispatching call in the primitive operation case. Within
--- the primitive operation, a view conversion of the formal parameter to
--- a class-wide type is then used to force a (re)dispatching call.
---
--- For the type conversion and parameter passing case, a combining of
--- view conversion and parameter passing of initial specific objects are
--- called directly to the class-wide and primitive operations.
---
---
--- CHANGE HISTORY:
--- 28 Jun 95 SAIC Initial prerelease version.
--- 23 Apr 96 SAIC Added use C390007_0 in the main.
---
---!
-
-package C390007_0 is
-
- type Call_ID_Kind is (None, Parent_Outer, Parent_Inner,
- Derived_Outer, Derived_Inner);
-
- type Root_Type is abstract tagged null record;
-
- procedure Outer_Proc (X : in out Root_Type) is abstract;
- procedure Inner_Proc (X : in out Root_Type) is abstract;
-
- procedure ClassWide_Proc (X : in out Root_Type'Class);
-
-end C390007_0;
-
-
- --==================================================================--
-
-
-package body C390007_0 is
-
- procedure ClassWide_Proc (X : in out Root_Type'Class) is
- begin
- Inner_Proc (X);
- end ClassWide_Proc;
-
-end C390007_0;
-
-
- --==================================================================--
-
-
-package C390007_0.C390007_1 is
-
- type Param_Parent_Type is new Root_Type with record
- Last_Call : Call_ID_Kind := None;
- end record;
-
- procedure Outer_Proc (X : in out Param_Parent_Type);
- procedure Inner_Proc (X : in out Param_Parent_Type);
-
-end C390007_0.C390007_1;
-
-
- --==================================================================--
-
-
-package body C390007_0.C390007_1 is
-
- procedure Outer_Proc (X : in out Param_Parent_Type) is
- begin
- X.Last_Call := Parent_Outer;
- end Outer_Proc;
-
- procedure Inner_Proc (X : in out Param_Parent_Type) is
- begin
- X.Last_Call := Parent_Inner;
- end Inner_Proc;
-
-end C390007_0.C390007_1;
-
-
- --==================================================================--
-
-
-package C390007_0.C390007_1.C390007_2 is
-
- type Param_Derived_Type is new Param_Parent_Type with null record;
-
- procedure Outer_Proc (X : in out Param_Derived_Type);
- procedure Inner_Proc (X : in out Param_Derived_Type);
-
-end C390007_0.C390007_1.C390007_2;
-
-
- --==================================================================--
-
-
-package body C390007_0.C390007_1.C390007_2 is
-
- procedure Outer_Proc (X : in out Param_Derived_Type) is
- Y : Root_Type'Class := X;
- begin
- Inner_Proc (Y); -- Redispatch.
- Root_Type'Class (X) := Y;
- end Outer_Proc;
-
- procedure Inner_Proc (X : in out Param_Derived_Type) is
- begin
- X.Last_Call := Derived_Inner;
- end Inner_Proc;
-
-end C390007_0.C390007_1.C390007_2;
-
-
- --==================================================================--
-
-
-package C390007_0.C390007_3 is
-
- type Convert_Parent_Type is new Root_Type with record
- First_Call : Call_ID_Kind := None;
- Second_Call : Call_ID_Kind := None;
- end record;
-
- procedure Outer_Proc (X : in out Convert_Parent_Type);
- procedure Inner_Proc (X : in out Convert_Parent_Type);
-
-end C390007_0.C390007_3;
-
-
- --==================================================================--
-
-
-package body C390007_0.C390007_3 is
-
- procedure Outer_Proc (X : in out Convert_Parent_Type) is
- begin
- X.First_Call := Parent_Outer;
- Inner_Proc (Root_Type'Class(X)); -- Redispatch.
- end Outer_Proc;
-
- procedure Inner_Proc (X : in out Convert_Parent_Type) is
- begin
- X.Second_Call := Parent_Inner;
- end Inner_Proc;
-
-end C390007_0.C390007_3;
-
-
- --==================================================================--
-
-
-package C390007_0.C390007_3.C390007_4 is
-
- type Convert_Derived_Type is new Convert_Parent_Type with null record;
-
- procedure Outer_Proc (X : in out Convert_Derived_Type);
- procedure Inner_Proc (X : in out Convert_Derived_Type);
-
-end C390007_0.C390007_3.C390007_4;
-
-
- --==================================================================--
-
-
-package body C390007_0.C390007_3.C390007_4 is
-
- procedure Outer_Proc (X : in out Convert_Derived_Type) is
- begin
- X.First_Call := Derived_Outer;
- Inner_Proc (Root_Type'Class(X)); -- Redispatch.
- end Outer_Proc;
-
- procedure Inner_Proc (X : in out Convert_Derived_Type) is
- begin
- X.Second_Call := Derived_Inner;
- end Inner_Proc;
-
-end C390007_0.C390007_3.C390007_4;
-
-
- --==================================================================--
-
-
-with C390007_0.C390007_1.C390007_2;
-with C390007_0.C390007_3.C390007_4;
-use C390007_0;
-
-with Report;
-procedure C390007 is
-begin
- Report.Test ("C390007", "Check that the tag of an object of a tagged " &
- "type is preserved by type conversion and parameter passing");
-
-
- --
- -- Check that tags are preserved by parameter passing:
- --
-
- Parameter_Passing_Subtest:
- declare
- Specific_A : C390007_0.C390007_1.C390007_2.Param_Derived_Type;
- Specific_B : C390007_0.C390007_1.C390007_2.Param_Derived_Type;
-
- ClassWide_A : C390007_0.C390007_1.Param_Parent_Type'Class := Specific_A;
- ClassWide_B : C390007_0.C390007_1.Param_Parent_Type'Class := Specific_B;
-
- use C390007_0.C390007_1;
- use C390007_0.C390007_1.C390007_2;
- begin
-
- Outer_Proc (Specific_A);
- if Specific_A.Last_Call /= Derived_Inner then
- Report.Failed ("Parameter passing: tag not preserved in call to " &
- "primitive operation with specific operand");
- end if;
-
- C390007_0.ClassWide_Proc (Specific_B);
- if Specific_B.Last_Call /= Derived_Inner then
- Report.Failed ("Parameter passing: tag not preserved in call to " &
- "class-wide operation with specific operand");
- end if;
-
- Outer_Proc (ClassWide_A);
- if ClassWide_A.Last_Call /= Derived_Inner then
- Report.Failed ("Parameter passing: tag not preserved in call to " &
- "primitive operation with class-wide operand");
- end if;
-
- C390007_0.ClassWide_Proc (ClassWide_B);
- if ClassWide_B.Last_Call /= Derived_Inner then
- Report.Failed ("Parameter passing: tag not preserved in call to " &
- "class-wide operation with class-wide operand");
- end if;
-
- end Parameter_Passing_Subtest;
-
-
- --
- -- Check that tags are preserved by type conversion:
- --
-
- Type_Conversion_Subtest:
- declare
- Specific_A : C390007_0.C390007_3.C390007_4.Convert_Derived_Type;
- Specific_B : C390007_0.C390007_3.C390007_4.Convert_Derived_Type;
-
- ClassWide_A : C390007_0.C390007_3.Convert_Parent_Type'Class :=
- C390007_0.C390007_3.Convert_Parent_Type(Specific_A);
- ClassWide_B : C390007_0.C390007_3.Convert_Parent_Type'Class :=
- C390007_0.C390007_3.Convert_Parent_Type(Specific_B);
-
- use C390007_0.C390007_3;
- use C390007_0.C390007_3.C390007_4;
- begin
-
- Outer_Proc (Convert_Parent_Type(Specific_A));
- if (Specific_A.First_Call /= Parent_Outer) or
- (Specific_A.Second_Call /= Derived_Inner)
- then
- Report.Failed ("Type conversion: tag not preserved in call to " &
- "primitive operation with specific operand");
- end if;
-
- Outer_Proc (ClassWide_A);
- if (ClassWide_A.First_Call /= Derived_Outer) or
- (ClassWide_A.Second_Call /= Derived_Inner)
- then
- Report.Failed ("Type conversion: tag not preserved in call to " &
- "primitive operation with class-wide operand");
- end if;
-
- C390007_0.ClassWide_Proc (Convert_Parent_Type(Specific_B));
- if (Specific_B.Second_Call /= Derived_Inner) then
- Report.Failed ("Type conversion: tag not preserved in call to " &
- "class-wide operation with specific operand");
- end if;
-
- C390007_0.ClassWide_Proc (ClassWide_B);
- if (ClassWide_A.Second_Call /= Derived_Inner) then
- Report.Failed ("Type conversion: tag not preserved in call to " &
- "class-wide operation with class-wide operand");
- end if;
-
- end Type_Conversion_Subtest;
-
-
- --
- -- Check that tags are preserved by type conversion and parameter passing:
- --
-
- Type_Conversion_And_Parameter_Passing_Subtest:
- declare
- Specific_A : C390007_0.C390007_1.C390007_2.Param_Derived_Type;
- Specific_B : C390007_0.C390007_1.C390007_2.Param_Derived_Type;
-
- use C390007_0.C390007_1;
- use C390007_0.C390007_1.C390007_2;
- begin
-
- Outer_Proc (Param_Parent_Type (Specific_A));
- if Specific_A.Last_Call /= Parent_Outer then
- Report.Failed ("Type conversion and parameter passing: tag not " &
- "preserved in call to primitive operation with " &
- "specific operand");
- end if;
-
- C390007_0.ClassWide_Proc (Param_Parent_Type (Specific_B));
- if Specific_B.Last_Call /= Derived_Inner then
- Report.Failed ("Type conversion and parameter passing: tag not " &
- "preserved in call to class-wide operation with " &
- "specific operand");
- end if;
-
- end Type_Conversion_And_Parameter_Passing_Subtest;
-
-
- Report.Result;
-
-end C390007;