aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c4/c460a01.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c4/c460a01.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c4/c460a01.a408
1 files changed, 0 insertions, 408 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c4/c460a01.a b/gcc/testsuite/ada/acats/tests/c4/c460a01.a
deleted file mode 100644
index 2d583706eb9..00000000000
--- a/gcc/testsuite/ada/acats/tests/c4/c460a01.a
+++ /dev/null
@@ -1,408 +0,0 @@
--- C460A01.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 the target type of a type conversion is a general
--- access type, Program_Error is raised if the accessibility level of
--- the operand type is deeper than that of the target type. Check for
--- cases where the type conversion occurs in an instance body, and
--- the operand type is passed as an actual during instantiation.
---
--- TEST DESCRIPTION:
--- In order to satisfy accessibility requirements, the operand type must
--- be at the same or a less deep nesting level than the target type -- the
--- operand type must "live" as long as the target type. Nesting levels
--- are the run-time nestings of masters: block statements; subprogram,
--- task, and entry bodies; and accept statements. Packages are invisible
--- to accessibility rules.
---
--- This test checks for cases where the operand is a subprogram formal
--- parameter.
---
--- The test declares three generic packages, each containing an access
--- type conversion in which the operand type is a formal type:
---
--- (1) One in which the target type is declared within the
--- specification, and the conversion occurs within a nested
--- function.
---
--- (2) One in which the target type is also a formal type, and
--- the conversion occurs within a nested function.
---
--- (3) One in which the target type is declared outside the
--- generic, and the conversion occurs within a nested
--- procedure.
---
--- The test verifies the following:
---
--- For (1), Program_Error is not raised when the nested function is
--- called. Since the actual corresponding to the formal operand type
--- must always have the same or a less deep level than the target
--- type declared within the instance, the access type conversion is
--- always safe.
---
--- For (2), Program_Error is raised when the nested function is
--- called if the operand type passed as an actual during instantiation
--- has an accessibility level deeper than that of the target type
--- passed as an actual, and that no exception is raised otherwise.
--- The exception is propagated to the innermost enclosing master.
---
--- For (3), Program_Error is raised when the nested procedure is
--- called if the operand type passed as an actual during instantiation
--- has an accessibility level deeper than that of the target type.
--- The exception is handled within the nested procedure.
---
--- TEST FILES:
--- The following files comprise this test:
---
--- F460A00.A
--- => C460A01.A
---
---
--- CHANGE HISTORY:
--- 09 May 95 SAIC Initial prerelease version.
--- 24 Apr 96 SAIC Added code to avoid dead variable optimization.
--- 13 Feb 97 PWB.CTA Removed 'Class from qual expression at line 342.
---!
-
-generic
- type Designated_Type is tagged private;
- type Operand_Type is access Designated_Type;
-package C460A01_0 is
- type Target_Type is access all Designated_Type;
- function Convert (P : Operand_Type) return Target_Type;
-end C460A01_0;
-
-
- --==================================================================--
-
-
-package body C460A01_0 is
- function Convert (P : Operand_Type) return Target_Type is
- begin
- return Target_Type(P); -- Never fails.
- end Convert;
-end C460A01_0;
-
-
- --==================================================================--
-
-
-generic
- type Designated_Type is tagged private;
- type Operand_Type is access all Designated_Type;
- type Target_Type is access all Designated_Type;
-package C460A01_1 is
- function Convert (P : Operand_Type) return Target_Type;
-end C460A01_1;
-
-
- --==================================================================--
-
-
-package body C460A01_1 is
- function Convert (P : Operand_Type) return Target_Type is
- begin
- return Target_Type(P);
- end Convert;
-end C460A01_1;
-
-
- --==================================================================--
-
-
-with F460A00;
-generic
- type Designated_Type (<>) is new F460A00.Tagged_Type with private;
- type Operand_Type is access Designated_Type;
-package C460A01_2 is
- procedure Proc (P : Operand_Type;
- Res : out F460A00.TC_Result_Kind);
-end C460A01_2;
-
-
- --==================================================================--
-
-with Report;
-package body C460A01_2 is
- procedure Proc (P : Operand_Type;
- Res : out F460A00.TC_Result_Kind) is
- Ptr : F460A00.AccTag_L0;
- begin
- Ptr := F460A00.AccTag_L0(P);
-
- -- Avoid optimization (dead variable removal of Ptr):
- if not Report.Equal (Ptr.C, Ptr.C) then -- Always false.
- Report.Failed ("Unexpected error in C460A01_2 instance");
- end if;
-
- Res := F460A00.OK;
- exception
- when Program_Error => Res := F460A00.PE_Exception;
- when others => Res := F460A00.Others_Exception;
- end Proc;
-end C460A01_2;
-
-
- --==================================================================--
-
-
-with F460A00;
-with C460A01_0;
-with C460A01_1;
-with C460A01_2;
-
-with Report;
-procedure C460A01 is
-begin -- C460A01. -- [ Level = 1 ]
-
- Report.Test ("C460A01", "Run-time accessibility checks: instance " &
- "bodies. Operand type of access type conversion is " &
- "passed as actual to instance");
-
-
- SUBTEST1:
- declare -- [ Level = 2 ]
- type AccTag_L2 is access all F460A00.Tagged_Type;
- Operand: AccTag_L2 := new F460A00.Tagged_Type;
-
- Result : F460A00.TC_Result_Kind := F460A00.UN_Init;
- begin -- SUBTEST1.
-
- declare -- [ Level = 3 ]
- -- The instantiation of C460A01_0 should NOT result in any
- -- exceptions.
-
- package Pack_OK is new C460A01_0 (F460A00.Tagged_Type, AccTag_L2);
- Target : Pack_OK.Target_Type;
- begin
- -- The accessibility level of Pack_OK.Target_Type will always be at
- -- least as deep as the operand type passed as an actual. Thus,
- -- a call to Pack_OK.Convert does not propagate an exception:
-
- Target := Pack_OK.Convert(Operand);
-
- -- Avoid optimization (dead variable removal of Target):
- if not Report.Equal (Target.C, Target.C) then -- Always false.
- Report.Failed ("Unexpected error in SUBTEST #1");
- end if;
-
- Result := F460A00.OK; -- Expected result.
- exception
- when Program_Error => Result := F460A00.PE_Exception;
- when others => Result := F460A00.Others_Exception;
- end;
-
- F460A00.TC_Check_Results (Result, F460A00.OK, "SUBTEST #1");
-
- exception
- when Program_Error =>
- Report.Failed ("SUBTEST #1: Program_Error incorrectly raised");
- when others =>
- Report.Failed ("SUBTEST #1: Unexpected exception raised");
- end SUBTEST1;
-
-
-
- SUBTEST2:
- declare -- [ Level = 2 ]
- type AccTag_L2 is access all F460A00.Tagged_Type;
- Operand : AccTag_L2 := new F460A00.Tagged_Type;
-
- Result : F460A00.TC_Result_Kind := F460A00.UN_Init;
- begin -- SUBTEST2.
-
- declare -- [ Level = 3 ]
-
- type AccTag_L3 is access all F460A00.Tagged_Type;
- Target : AccTag_L3;
-
- -- The instantiation of C460A01_1 should NOT result in any
- -- exceptions.
-
- package Pack_OK is new C460A01_1
- (Designated_Type => F460A00.Tagged_Type,
- Operand_Type => AccTag_L2,
- Target_Type => AccTag_L3);
- begin
- -- The accessibility level of the actual passed as the operand type
- -- in Pack_OK is 2. The accessibility level of the actual passed as
- -- the target type is 3. Therefore, the access type conversion in
- -- Pack_OK.Convert does not raise an exception when the subprogram is
- -- called. If an exception is (incorrectly) raised, it is propagated
- -- to the innermost enclosing master:
-
- Target := Pack_OK.Convert(Operand);
-
- -- Avoid optimization (dead variable removal of Target):
- if not Report.Equal (Target.C, Target.C) then -- Always false.
- Report.Failed ("Unexpected error in SUBTEST #2");
- end if;
-
- Result := F460A00.OK; -- Expected result.
- exception
- when Program_Error => Result := F460A00.PE_Exception;
- when others => Result := F460A00.Others_Exception;
- end;
-
- F460A00.TC_Check_Results (Result, F460A00.OK, "SUBTEST #2");
-
- exception
- when Program_Error =>
- Report.Failed ("SUBTEST #2: Program_Error incorrectly raised");
- when others =>
- Report.Failed ("SUBTEST #2: Unexpected exception raised");
- end SUBTEST2;
-
-
-
- SUBTEST3:
- declare -- [ Level = 2 ]
- type AccTag_L2 is access all F460A00.Tagged_Type;
- Target : AccTag_L2;
-
- Result : F460A00.TC_Result_Kind := F460A00.UN_Init;
- begin -- SUBTEST3.
-
- declare -- [ Level = 3 ]
-
- type AccTag_L3 is access all F460A00.Tagged_Type;
- Operand : AccTag_L3 := new F460A00.Tagged_Type;
-
- -- The instantiation of C460A01_1 should NOT result in any
- -- exceptions.
-
- package Pack_PE is new C460A01_1
- (Designated_Type => F460A00.Tagged_Type,
- Operand_Type => AccTag_L3,
- Target_Type => AccTag_L2);
- begin
- -- The accessibility level of the actual passed as the operand type
- -- in Pack_PE is 3. The accessibility level of the actual passed as
- -- the target type is 2. Therefore, the access type conversion in
- -- Pack_PE.Convert raises Program_Error when the subprogram is
- -- called. The exception is propagated to the innermost enclosing
- -- master:
-
- Target := Pack_PE.Convert(Operand);
-
- -- Avoid optimization (dead variable removal of Target):
- if not Report.Equal (Target.C, Target.C) then -- Always false.
- Report.Failed ("Unexpected error in SUBTEST #3");
- end if;
-
- Result := F460A00.OK;
- exception
- when Program_Error => Result := F460A00.PE_Exception;
- -- Expected result.
- when others => Result := F460A00.Others_Exception;
- end;
-
- F460A00.TC_Check_Results (Result, F460A00.PE_Exception, "SUBTEST #3");
-
- exception
- when Program_Error =>
- Report.Failed ("SUBTEST #3: Program_Error incorrectly raised");
- when others =>
- Report.Failed ("SUBTEST #3: Unexpected exception raised");
- end SUBTEST3;
-
-
-
- SUBTEST4:
- declare -- [ Level = 2 ]
- Result : F460A00.TC_Result_Kind := F460A00.UN_Init;
- begin -- SUBTEST4.
-
- declare -- [ Level = 3 ]
-
- TType : F460A00.Tagged_Type;
- Operand : F460A00.AccTagClass_L0
- := new F460A00.Tagged_Type'(TType);
-
- -- The instantiation of C460A01_2 should NOT result in any
- -- exceptions.
-
- package Pack_OK is new C460A01_2 (F460A00.Tagged_Type'Class,
- F460A00.AccTagClass_L0);
- begin
- -- The accessibility level of the actual passed as the operand type
- -- in Pack_OK is 0. The accessibility level of the target type
- -- (F460A00.AccTag_L0) is also 0. Therefore, the access type
- -- conversion in Pack_OK.Proc does not raise an exception when the
- -- subprogram is called. If an exception is (incorrectly) raised,
- -- it is handled within the subprogram:
-
- Pack_OK.Proc(Operand, Result);
- end;
-
- F460A00.TC_Check_Results (Result, F460A00.OK, "SUBTEST #4");
-
- exception
- when Program_Error =>
- Report.Failed ("SUBTEST #4: Program_Error incorrectly raised");
- when others =>
- Report.Failed ("SUBTEST #4: Unexpected exception raised");
- end SUBTEST4;
-
-
-
- SUBTEST5:
- declare -- [ Level = 2 ]
- Result : F460A00.TC_Result_Kind := F460A00.UN_Init;
- begin -- SUBTEST5.
-
- declare -- [ Level = 3 ]
-
- type AccDerTag_L3 is access all F460A00.Derived_Tagged_Type;
- Operand : AccDerTag_L3 := new F460A00.Derived_Tagged_Type;
-
- -- The instantiation of C460A01_2 should NOT result in any
- -- exceptions.
-
- package Pack_PE is new C460A01_2 (F460A00.Derived_Tagged_Type,
- AccDerTag_L3);
- begin
- -- The accessibility level of the actual passed as the operand type
- -- in Pack_PE is 3. The accessibility level of the target type
- -- (F460A00.AccTag_L0) is 0. Therefore, the access type conversion
- -- in Pack_PE.Proc raises Program_Error when the subprogram is
- -- called. The exception is handled within the subprogram:
-
- Pack_PE.Proc(Operand, Result);
- end;
-
- F460A00.TC_Check_Results (Result, F460A00.PE_Exception, "SUBTEST #5");
-
- exception
- when Program_Error =>
- Report.Failed ("SUBTEST #5: Program_Error incorrectly raised");
- when others =>
- Report.Failed ("SUBTEST #5: Unexpected exception raised");
- end SUBTEST5;
-
- Report.Result;
-
-end C460A01;