URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c3/] [c3a2a02.a] - Rev 720
Compare with Previous | Blame | View Log
-- C3A2A02.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, for X'Access of a general access type A, Program_Error is-- raised if the accessibility level of X is deeper than that of A.-- Check for cases where X'Access occurs in an instance body, and A-- is a type either declared inside the instance, or declared outside-- the instance but not passed as an actual during instantiation.---- TEST DESCRIPTION:-- In order to satisfy accessibility requirements, the designated-- object X must be at the same or a less deep nesting level than the-- general access type A -- X must "live" as long as A. 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 declares three generic packages:---- (1) One in which X is of a formal tagged derived type and declared-- in the body, A is a type declared outside the instance, and-- X'Access occurs in the declarative part of a nested subprogram.---- (2) One in which X is a formal object of a tagged type, A is a-- type declared outside the instance, and X'Access occurs in the-- declarative part of the body.---- (3) One in which there are two X's and two A's. In the first pair,-- X is a formal in object of a tagged type, A is declared in the-- specification, and X'Access occurs in the declarative part of-- the body. In the second pair, X is of a formal derived type,-- X and A are declared in the specification, and X'Access occurs-- in the sequence of statements of the body.---- The test verifies the following:---- For (1), Program_Error is raised when the nested subprogram is-- called, if the generic package is instantiated at a deeper level-- than that of A. The exception is propagated to the innermost-- enclosing master. Also, check that Program_Error is not raised-- if the instantiation is at the same level as that of A.---- For (2), Program_Error is raised upon instantiation if the object-- passed as an actual during instantiation has an accessibility level-- deeper than that of A. The exception is propagated to the innermost-- enclosing master. Also, check that Program_Error is not raised if-- the level of the actual object is not deeper than that of A.---- For (3), Program_Error is not raised, for actual objects at-- various accessibility levels (since A will have at least the same-- accessibility level as X in all cases, no exception should ever-- be raised).---- TEST FILES:-- The following files comprise this test:---- F3A2A00.A-- -> C3A2A02.A------ CHANGE HISTORY:-- 12 May 95 SAIC Initial prerelease version.-- 10 Jul 95 SAIC Modified code to avoid dead variable optimization.-- 26 Jun 98 EDS Added pragma Elaborate (C3A2A02_0) to package-- package C3A2A02_3, in order to avoid possible-- instantiation error.--!with F3A2A00;generictype FD is new F3A2A00.Tagged_Type with private;package C3A2A02_0 isprocedure Proc;end C3A2A02_0;--==================================================================--with Report;package body C3A2A02_0 isX : aliased FD;procedure Proc isPtr : F3A2A00.AccTagClass_L0 := X'Access;begin-- Avoid optimization (dead variable removal of Ptr):if not Report.Equal (Ptr.C, Ptr.C) then -- Always false.Report.Failed ("Unexpected error in Proc");end if;end Proc;end C3A2A02_0;--==================================================================--with F3A2A00;genericFObj : in out F3A2A00.Tagged_Type;package C3A2A02_1 isprocedure Dummy; -- Needed to allow package body.end C3A2A02_1;--==================================================================--with Report;package body C3A2A02_1 isPtr : F3A2A00.AccTag_L0 := FObj'Access;procedure Dummy isbeginnull;end Dummy;begin-- Avoid optimization (dead variable removal of Ptr):if not Report.Equal (Ptr.C, Ptr.C) then -- Always false.Report.Failed ("Unexpected error in C3A2A02_1 instance");end if;end C3A2A02_1;--==================================================================--with F3A2A00;generictype FD is new F3A2A00.Array_Type;FObj : in F3A2A00.Tagged_Type;package C3A2A02_2 istype GAF is access all FD;type GAO is access constant F3A2A00.Tagged_Type;XG : aliased FD;PtrF : GAF;Index : Integer := FD'First;procedure Dummy; -- Needed to allow package body.end C3A2A02_2;--==================================================================--with Report;package body C3A2A02_2 isPtrO : GAO := FObj'Access;procedure Dummy isbeginnull;end Dummy;beginPtrF := XG'Access;-- Avoid optimization (dead variable removal of PtrO and/or PtrF):if not Report.Equal (PtrO.C, PtrO.C) then -- Always false.Report.Failed ("Unexpected error in C3A2A02_2 instance: PtrO");end if;if not Report.Equal (PtrF(Index).C, PtrF(Index).C) then -- Always false.Report.Failed ("Unexpected error in C3A2A02_2 instance: PtrF");end if;end C3A2A02_2;--==================================================================---- The instantiation of C3A2A02_0 should NOT result in any exceptions.with F3A2A00;with C3A2A02_0;pragma Elaborate (C3A2A02_0);package C3A2A02_3 is new C3A2A02_0 (F3A2A00.Tagged_Type);--==================================================================--with F3A2A00;with C3A2A02_0;with C3A2A02_1;with C3A2A02_2;with C3A2A02_3;with Report;procedure C3A2A02 isbegin -- C3A2A02. -- [ Level = 1 ]Report.Test ("C3A2A02", "Run-time accessibility checks: instance " &"bodies. Type of X'Access is local or global to instance");SUBTEST1:declare -- [ Level = 2 ]Result1 : F3A2A00.TC_Result_Kind;Result2 : F3A2A00.TC_Result_Kind;begin -- SUBTEST1.declare -- [ Level = 3 ]package Pack_Same_Level renames C3A2A02_3;begin-- The accessibility level of Pack_Same_Level.X is that of the-- instance (0), not that of the renaming declaration. The level of-- the type of Pack_Same_Level.X'Access (F3A2A00.AccTagClass_L0) is-- 0. Therefore, the X'Access in Pack_Same_Level.Proc does not raise-- an exception when the subprogram is called. The level of execution-- of the subprogram is irrelevant:Pack_Same_Level.Proc;Result1 := F3A2A00.OK; -- Expected result.exceptionwhen Program_Error => Result1 := F3A2A00.P_E;when others => Result1 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result1, F3A2A00.OK,"SUBTEST #1 (same level)");declare -- [ Level = 3 ]-- The instantiation of C3A2A02_0 should NOT result in any-- exceptions.package Pack_Deeper_Level is new C3A2A02_0 (F3A2A00.Tagged_Type);begin-- The accessibility level of Pack_Deeper_Level.X is that of the-- instance (3). The level of the type of Pack_Deeper_Level.X'Access-- (F3A2A00.AccTagClass_L0) is 0. Therefore, the X'Access in-- Pack_Deeper_Level.Proc propagates Program_Error when the-- subprogram is called:Pack_Deeper_Level.Proc;Result2 := F3A2A00.OK;exceptionwhen Program_Error => Result2 := F3A2A00.P_E; -- Expected result.when others => Result2 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result2, F3A2A00.P_E,"SUBTEST #1: deeper level");exceptionwhen Program_Error =>Report.Failed ("SUBTEST #1: Program_Error incorrectly raised " &"during instantiation of generic");when others =>Report.Failed ("SUBTEST #1: Unexpected exception raised " &"during instantiation of generic");end SUBTEST1;SUBTEST2:declare -- [ Level = 2 ]Result1 : F3A2A00.TC_Result_Kind;Result2 : F3A2A00.TC_Result_Kind;begin -- SUBTEST2.declare -- [ Level = 3 ]X_L3 : F3A2A00.Tagged_Type;begindeclare -- [ Level = 4 ]-- The accessibility level of the actual object corresponding to-- FObj in Pack_PE is 3. The level of the type of FObj'Access-- (F3A2A00.AccTag_L0) is 0. Therefore, the FObj'Access in Pack_PE-- propagates Program_Error when the instance body is elaborated:package Pack_PE is new C3A2A02_1 (X_L3);beginResult1 := F3A2A00.OK;end;exceptionwhen Program_Error => Result1 := F3A2A00.P_E; -- Expected result.when others => Result1 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result1, F3A2A00.P_E,"SUBTEST #2: deeper level");begin -- [ Level = 3 ]declare -- [ Level = 4 ]-- The accessibility level of the actual object corresponding to-- FObj in Pack_OK is 0. The level of the type of FObj'Access-- (F3A2A00.AccTag_L0) is also 0. Therefore, the FObj'Access in-- Pack_OK does not raise an exception when the instance body is-- elaborated:package Pack_OK is new C3A2A02_1 (F3A2A00.X_L0);beginResult2 := F3A2A00.OK; -- Expected result.end;exceptionwhen Program_Error => Result2 := F3A2A00.P_E;when others => Result2 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result2, F3A2A00.OK,"SUBTEST #2: same level");end SUBTEST2;SUBTEST3:declare -- [ Level = 2 ]Result1 : F3A2A00.TC_Result_Kind;Result2 : F3A2A00.TC_Result_Kind;begin -- SUBTEST3.declare -- [ Level = 3 ]X_L3 : F3A2A00.Tagged_Type;begindeclare -- [ Level = 4 ]-- Since the accessibility level of the type of X'Access in-- both cases within Pack_OK1 is that of the instance, and since-- X is either passed as an actual (in which case its level will-- not be deeper than that of the instance) or is declared within-- the instance (in which case its level is the same as that of-- the instance), no exception should be raised when the instance-- body is elaborated:package Pack_OK1 is new C3A2A02_2 (F3A2A00.Array_Type, X_L3);beginResult1 := F3A2A00.OK; -- Expected result.end;exceptionwhen Program_Error => Result1 := F3A2A00.P_E;when others => Result1 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result1, F3A2A00.OK,"SUBTEST #3: 1st okay case");declare -- [ Level = 3 ]type My_Array is new F3A2A00.Array_Type;begindeclare -- [ Level = 4 ]-- Since the accessibility level of the type of X'Access in-- both cases within Pack_OK2 is that of the instance, and since-- X is either passed as an actual (in which case its level will-- not be deeper than that of the instance) or is declared within-- the instance (in which case its level is the same as that of-- the instance), no exception should be raised when the instance-- body is elaborated:package Pack_OK2 is new C3A2A02_2 (My_Array, F3A2A00.X_L0);beginResult2 := F3A2A00.OK; -- Expected result.end;exceptionwhen Program_Error => Result2 := F3A2A00.P_E;when others => Result2 := F3A2A00.O_E;end;F3A2A00.TC_Display_Results (Result2, F3A2A00.OK,"SUBTEST #3: 2nd okay case");end SUBTEST3;Report.Result;end C3A2A02;
