URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c7/] [c760010.a] - Rev 720
Compare with Previous | Blame | View Log
-- C760010.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 explicit calls to Initialize, Adjust and Finalize-- procedures that raise exceptions propagate the exception raised,-- not Program_Error. Check this for both a user defined exception-- and a language defined exception. Check that implicit calls to-- initialize procedures that raise an exception propagate the-- exception raised, not Program_Error;---- Check that the utilization of a controlled type as the actual for-- a generic formal tagged private parameter supports the correct-- behavior in the instantiated software.---- TEST DESCRIPTION:-- Declares a generic package instantiated to check that controlled-- types are not impacted by the "generic boundary."-- This instance is then used to perform the tests of various calls to-- the procedures. After each operation in the main program that should-- cause implicit calls where an exception is raised, the program handles-- Program_Error. After each explicit call, the program handles the-- Expected_Error. Handlers for the opposite exception are provided to-- catch the obvious failure modes. The predefined exception-- Tasking_Error is used to be certain that some other reason has not-- raised a predefined exception.------ DATA STRUCTURES---- C760010_1.Simple_Control is derived from-- Ada.Finalization.Controlled---- C760010_2.Embedded_Derived is derived from C760010_1.Simple_Control-- by way of generic instantiation------ CHANGE HISTORY:-- 01 MAY 95 SAIC Initial version-- 23 APR 96 SAIC Fix visibility problem for 2.1-- 14 NOV 96 SAIC Revisit for 2.1 release-- 26 JUN 98 EDS Added pragma Elaborate_Body to-- package C760010_0.Check_Formal_Tagged-- to avoid possible instantiation error--!---------------------------------------------------------------- C760010_0package C760010_0 isUser_Defined_Exception : exception;type Actions is ( No_Action,Init_Raise_User_Defined, Init_Raise_Standard,Adj_Raise_User_Defined, Adj_Raise_Standard,Fin_Raise_User_Defined, Fin_Raise_Standard );Action : Actions := No_Action;function Unique return Natural;end C760010_0;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --package body C760010_0 isValue : Natural := 101;function Unique return Natural isbeginValue := Value +1;return Value;end Unique;end C760010_0;---------------------------------------------------------------- C760010_0------------------------------------------------------ Check_Formal_Taggedgenerictype Formal_Tagged is tagged private;package C760010_0.Check_Formal_Tagged ispragma Elaborate_Body;type Embedded_Derived is new Formal_Tagged with recordTC_Meaningless_Value : Natural := Unique;end record;procedure Initialize( ED: in out Embedded_Derived );procedure Adjust ( ED: in out Embedded_Derived );procedure Finalize ( ED: in out Embedded_Derived );end C760010_0.Check_Formal_Tagged;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body C760010_0.Check_Formal_Tagged isprocedure Initialize( ED: in out Embedded_Derived ) isbeginED.TC_Meaningless_Value := Unique;case Action iswhen Init_Raise_User_Defined => raise User_Defined_Exception;when Init_Raise_Standard => raise Tasking_Error;when others => null;end case;end Initialize;procedure Adjust ( ED: in out Embedded_Derived ) isbeginED.TC_Meaningless_Value := Unique;case Action iswhen Adj_Raise_User_Defined => raise User_Defined_Exception;when Adj_Raise_Standard => raise Tasking_Error;when others => null;end case;end Adjust;procedure Finalize ( ED: in out Embedded_Derived ) isbeginED.TC_Meaningless_Value := Unique;case Action iswhen Fin_Raise_User_Defined => raise User_Defined_Exception;when Fin_Raise_Standard => raise Tasking_Error;when others => null;end case;end Finalize;end C760010_0.Check_Formal_Tagged;---------------------------------------------------------------- C760010_1with Ada.Finalization;package C760010_1 isprocedure Check_Counters(Init,Adj,Fin : Natural; Message: String);procedure Reset_Counters;type Simple_Control is new Ada.Finalization.Controlled with recordItem: Integer;end record;procedure Initialize( AV: in out Simple_Control );procedure Adjust ( AV: in out Simple_Control );procedure Finalize ( AV: in out Simple_Control );end C760010_1;-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --with Report;package body C760010_1 isInitialize_Called : Natural;Adjust_Called : Natural;Finalize_Called : Natural;procedure Check_Counters(Init,Adj,Fin : Natural; Message: String) isbeginif Init /= Initialize_Called thenReport.Failed("Initialize mismatch " & Message);end if;if Adj /= Adjust_Called thenReport.Failed("Adjust mismatch " & Message);end if;if Fin /= Finalize_Called thenReport.Failed("Finalize mismatch " & Message);end if;end Check_Counters;procedure Reset_Counters isbeginInitialize_Called := 0;Adjust_Called := 0;Finalize_Called := 0;end Reset_Counters;procedure Initialize( AV: in out Simple_Control ) isbeginInitialize_Called := Initialize_Called +1;AV.Item := 0;end Initialize;procedure Adjust ( AV: in out Simple_Control ) isbeginAdjust_Called := Adjust_Called +1;AV.Item := AV.Item +1;end Adjust;procedure Finalize ( AV: in out Simple_Control ) isbeginFinalize_Called := Finalize_Called +1;AV.Item := AV.Item +1;end Finalize;end C760010_1;---------------------------------------------------------------- C760010_2with C760010_0.Check_Formal_Tagged;with C760010_1;package C760010_2 isnew C760010_0.Check_Formal_Tagged(C760010_1.Simple_Control);---------------------------------------------------------------------------with Report;with C760010_0;with C760010_1;with C760010_2;procedure C760010 isuse type C760010_0.Actions;procedure Case_Failure(Message: String) isbeginReport.Failed(Message & " for case "& C760010_0.Actions'Image(C760010_0.Action) );end Case_Failure;procedure Check_Implicit_Initialize isItem : C760010_2.Embedded_Derived; -- exception here propagates toGadget : C760010_2.Embedded_Derived; -- callerbeginif C760010_0.Actionin C760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_StandardthenCase_Failure("Anticipated exception at implicit init");end if;beginItem := Gadget; -- exception here handled locallyif C760010_0.Action in C760010_0.Adj_Raise_User_Defined.. C760010_0.Fin_Raise_Standard thenCase_Failure ("Anticipated exception at assignment");end if;exceptionwhen Program_Error =>if C760010_0.Action not in C760010_0.Adj_Raise_User_Defined.. C760010_0.Fin_Raise_Standard thenReport.Failed("Program_Error in Check_Implicit_Initialize");end if;when Tasking_Error =>Report.Failed("Tasking_Error in Check_Implicit_Initialize");when C760010_0.User_Defined_Exception =>Report.Failed("User_Error in Check_Implicit_Initialize");when others =>Report.Failed("Wrong exception Check_Implicit_Initialize");end;end Check_Implicit_Initialize;---------------------------------------------------------------------------Global_Item : C760010_2.Embedded_Derived;---------------------------------------------------------------------------procedure Check_Explicit_Initialize isbeginbeginC760010_2.Initialize( Global_Item );if C760010_0.Actionin C760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_StandardthenCase_Failure("Anticipated exception at explicit init");end if;exceptionwhen Program_Error =>Report.Failed("Program_Error in Check_Explicit_Initialize");when Tasking_Error =>if C760010_0.Action /= C760010_0.Init_Raise_Standard thenReport.Failed("Tasking_Error in Check_Explicit_Initialize");end if;when C760010_0.User_Defined_Exception =>if C760010_0.Action /= C760010_0.Init_Raise_User_Defined thenReport.Failed("User_Error in Check_Explicit_Initialize");end if;when others =>Report.Failed("Wrong exception in Check_Explicit_Initialize");end;end Check_Explicit_Initialize;---------------------------------------------------------------------------procedure Check_Explicit_Adjust isbeginbeginC760010_2.Adjust( Global_Item );if C760010_0.Actionin C760010_0.Adj_Raise_User_Defined..C760010_0.Adj_Raise_StandardthenCase_Failure("Anticipated exception at explicit Adjust");end if;exceptionwhen Program_Error =>Report.Failed("Program_Error in Check_Explicit_Adjust");when Tasking_Error =>if C760010_0.Action /= C760010_0.Adj_Raise_Standard thenReport.Failed("Tasking_Error in Check_Explicit_Adjust");end if;when C760010_0.User_Defined_Exception =>if C760010_0.Action /= C760010_0.Adj_Raise_User_Defined thenReport.Failed("User_Error in Check_Explicit_Adjust");end if;when others =>Report.Failed("Wrong exception in Check_Explicit_Adjust");end;end Check_Explicit_Adjust;---------------------------------------------------------------------------procedure Check_Explicit_Finalize isbeginbeginC760010_2.Finalize( Global_Item );if C760010_0.Actionin C760010_0.Fin_Raise_User_Defined..C760010_0.Fin_Raise_StandardthenCase_Failure("Anticipated exception at explicit Finalize");end if;exceptionwhen Program_Error =>Report.Failed("Program_Error in Check_Explicit_Finalize");when Tasking_Error =>if C760010_0.Action /= C760010_0.Fin_Raise_Standard thenReport.Failed("Tasking_Error in Check_Explicit_Finalize");end if;when C760010_0.User_Defined_Exception =>if C760010_0.Action /= C760010_0.Fin_Raise_User_Defined thenReport.Failed("User_Error in Check_Explicit_Finalize");end if;when others =>Report.Failed("Wrong exception in Check_Explicit_Finalize");end;end Check_Explicit_Finalize;---------------------------------------------------------------------------begin -- Main test procedure.Report.Test ("C760010", "Check that explicit calls to finalization " &"procedures that raise exceptions propagate " &"the exception raised. Check the utilization " &"of a controlled type as the actual for a " &"generic formal tagged private parameter" );for Act in C760010_0.Actions loopC760010_1.Reset_Counters;C760010_0.Action := Act;beginCheck_Implicit_Initialize;if Act inC760010_0.Init_Raise_User_Defined..C760010_0.Init_Raise_Standard thenCase_Failure("No exception at Check_Implicit_Initialize");end if;exceptionwhen Tasking_Error =>if Act /= C760010_0.Init_Raise_Standard thenCase_Failure("Tasking_Error at Check_Implicit_Initialize");end if;when C760010_0.User_Defined_Exception =>if Act /= C760010_0.Init_Raise_User_Defined thenCase_Failure("User_Error at Check_Implicit_Initialize");end if;when Program_Error =>-- If finalize raises an exception, all other object are finalized-- first and Program_Error is raised upon leaving the master scope.-- 7.6.1:14if Act not in C760010_0.Fin_Raise_User_Defined..C760010_0.Fin_Raise_Standard thenCase_Failure("Program_Error at Check_Implicit_Initialize");end if;when others =>Case_Failure("Wrong exception at Check_Implicit_Initialize");end;Check_Explicit_Initialize;Check_Explicit_Adjust;Check_Explicit_Finalize;C760010_1.Check_Counters(0,0,0, C760010_0.Actions'Image(Act));end loop;-- Set to No_Action to avoid exception in finalizing Global_ItemC760010_0.Action := C760010_0.No_Action;Report.Result;end C760010;
