URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [ada/] [acats/] [tests/] [c9/] [c930001.a] - Rev 720
Compare with Previous | Blame | View Log
-- C930001.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.--*---- TEST OBJECTIVE:-- Check when a dependent task and its master both-- terminate as a result of a terminate alternative that-- finalization is performed and that the finalization is-- performed in the proper order.---- TEST DESCRIPTION:-- A controlled type with finalization is used to determine-- the order in which finalization occurs. The finalization-- procedure records the identity of the object being-- finalized.-- Two tasks, one nested inside the other, both contain-- objects of the above finalization type. These tasks-- cooperatively terminate so the termination and finalization-- order can be noted.------ CHANGE HISTORY:-- 08 Jan 96 SAIC ACVC 2.1-- 09 May 96 SAIC Addressed Reviewer comments.----!with Ada.Finalization;package C930001_0 isVerbose : constant Boolean := False;type Ids is range 0..10;Finalization_Order : array (Ids) of Ids := (Ids => 0);Finalization_Cnt : Ids := 0;protected Note is-- serializes concurrent access to Finalization_* aboveprocedure Done (Id : Ids);end Note;-- Objects of the following type are used to note the order in-- which finalization occurs.type Has_Finalization is new Ada.Finalization.Limited_Controlled withrecordId : Ids;end record;procedure Finalize (Object : in out Has_Finalization);end C930001_0;with Report;package body C930001_0 isprotected body Note isprocedure Done (Id : Ids) isbeginFinalization_Cnt := Finalization_Cnt + 1;Finalization_Order (Finalization_Cnt) := Id;end Done;end Note;procedure Finalize (Object : in out Has_Finalization) isbeginNote.Done (Object.Id);if Verbose thenReport.Comment ("in Finalize for" & Ids'Image (Object.Id));end if;end Finalize;end C930001_0;with Report;with ImpDef;with C930001_0; use C930001_0;procedure C930001 isbeginReport.Test ("C930001", "Check that dependent tasks are terminated" &" before the remaining finalization");declaretask Level_1;task body Level_1 isV1a : C930001_0.Has_Finalization; -------> 4task Level_2 isentry Not_Taken;end Level_2;task body Level_2 isV2 : C930001_0.Has_Finalization; -------> 2beginV2.Id := 2;C930001_0.Note.Done (1); -------> 1selectaccept Not_Taken;orterminate;-- cooperative termination at this point of-- both tasksend select;end Level_2;-- 7.6.1(11) requires that V1b be finalized before V1aV1b : C930001_0.Has_Finalization; -------> 3beginV1a.Id := 4;V1b.Id := 3;end Level_1;begin -- declarewhile not Level_1'Terminated loopdelay ImpDef.Switch_To_New_Task;end loop;C930001_0.Note.Done (5); -------> 5-- now check the orderfor I in Ids range 1..5 loopif Verbose thenReport.Comment (Ids'Image (I) &Ids'Image (Finalization_Order (I)));end if;if Finalization_Order (I) /= I thenReport.Failed ("Finalization occurred out of order" &" expected:" &Ids'Image (I) &" actual:" &Ids'Image (Finalization_Order (I)));end if;end loop;end;Report.Result;end C930001;
