aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c9/c953001.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c9/c953001.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c9/c953001.a188
1 files changed, 0 insertions, 188 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c9/c953001.a b/gcc/testsuite/ada/acats/tests/c9/c953001.a
deleted file mode 100644
index bc9c85f302f..00000000000
--- a/gcc/testsuite/ada/acats/tests/c9/c953001.a
+++ /dev/null
@@ -1,188 +0,0 @@
--- C953001.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 evaluation of an entry_barrier condition
--- propagates an exception, the exception Program_Error
--- is propagated to all current callers of all entries of the
--- protected object.
---
--- TEST DESCRIPTION:
--- This test declares a protected object (PO) with two entries and
--- a 5 element entry family.
--- All the entries are always closed. However, one of the entries
--- (Oh_No) will get a constraint_error in its barrier_evaluation
--- whenever the global variable Blow_Up is true.
--- An array of tasks is created where the tasks wait on the various
--- entries of the protected object. Once all the tasks are waiting
--- the main procedure calls the entry Oh_No and causes an exception
--- to be propagated to all the tasks. The tasks record the fact
--- that they got the correct exception in global variables that
--- can be checked after the tasks complete.
---
---
--- CHANGE HISTORY:
--- 19 OCT 95 SAIC ACVC 2.1
---
---!
-
-
-with Report;
-with ImpDef;
-procedure C953001 is
- Verbose : constant Boolean := False;
- Max_Tasks : constant := 12;
-
- -- note status and error conditions
- Blocked_Entry_Taken : Boolean := False;
- In_Oh_No : Boolean := False;
- Task_Passed : array (1..Max_Tasks) of Boolean := (1..Max_Tasks => False);
-
-begin
- Report.Test ("C953001",
- "Check that an exception in an entry_barrier condition" &
- " causes Program_Error to be propagated to all current" &
- " callers of all entries of the protected object");
-
- declare -- test encapsulation
- -- miscellaneous values
- Cows : Integer := Report.Ident_Int (1);
- Came_Home : Integer := Report.Ident_Int (2);
-
- -- make the Barrier_Condition fail only when we want it to
- Blow_Up : Boolean := False;
-
- function Barrier_Condition return Boolean is
- begin
- if Blow_Up then
- return 5 mod Report.Ident_Int(0) = 1;
- else
- return False;
- end if;
- end Barrier_Condition;
-
- subtype Family_Index is Integer range 1..5;
-
- protected PO is
- entry Block1;
- entry Oh_No;
- entry Family (Family_Index);
- end PO;
-
- protected body PO is
- entry Block1 when Report.Ident_Int(0) = Report.Ident_Int(1) is
- begin
- Blocked_Entry_Taken := True;
- end Block1;
-
- -- barrier will get a Constraint_Error (divide by 0)
- entry Oh_No when Barrier_Condition is
- begin
- In_Oh_No := True;
- end Oh_No;
-
- entry Family (for Member in Family_Index) when Cows = Came_Home is
- begin
- Blocked_Entry_Taken := True;
- end Family;
- end PO;
-
-
- task type Waiter is
- entry Take_Id (Id : Integer);
- end Waiter;
-
- Bunch_of_Waiters : array (1..Max_Tasks) of Waiter;
-
- task body Waiter is
- Me : Integer;
- Action : Integer;
- begin
- accept Take_Id (Id : Integer) do
- Me := Id;
- end Take_Id;
-
- Action := Me mod (Family_Index'Last + 1);
- begin
- if Action = 0 then
- PO.Block1;
- else
- PO.Family (Action);
- end if;
- Report.Failed ("no exception for task" & Integer'Image (Me));
- exception
- when Program_Error =>
- Task_Passed (Me) := True;
- if Verbose then
- Report.Comment ("pass for task" & Integer'Image (Me));
- end if;
- when others =>
- Report.Failed ("wrong exception raised in task" &
- Integer'Image (Me));
- end;
- end Waiter;
-
-
- begin -- test encapsulation
- for I in 1..Max_Tasks loop
- Bunch_Of_Waiters(I).Take_Id (I);
- end loop;
-
- -- give all the Waiters time to get queued
- delay 2*ImpDef.Clear_Ready_Queue;
-
- -- cause the protected object to fail
- begin
- Blow_Up := True;
- PO.Oh_No;
- Report.Failed ("no exception in call to PO.Oh_No");
- exception
- when Constraint_Error =>
- Report.Failed ("Constraint_Error instead of Program_Error");
- when Program_Error =>
- if Verbose then
- Report.Comment ("main exception passed");
- end if;
- when others =>
- Report.Failed ("wrong exception in main");
- end;
- end; -- test encapsulation
-
- -- all the tasks have now completed.
- -- check the flags for pass/fail info
- if Blocked_Entry_Taken then
- Report.Failed ("blocked entry taken");
- end if;
- if In_Oh_No then
- Report.Failed ("entry taken with exception in barrier");
- end if;
- for I in 1..Max_Tasks loop
- if not Task_Passed (I) then
- Report.Failed ("task" & Integer'Image (I) & " did not pass");
- end if;
- end loop;
-
- Report.Result;
-end C953001;