aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c7/c761007.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c7/c761007.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c7/c761007.a419
1 files changed, 0 insertions, 419 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c7/c761007.a b/gcc/testsuite/ada/acats/tests/c7/c761007.a
deleted file mode 100644
index 7b3dbfb9b6e..00000000000
--- a/gcc/testsuite/ada/acats/tests/c7/c761007.a
+++ /dev/null
@@ -1,419 +0,0 @@
--- C761007.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 a finalize procedure invoked by a transfer of control
--- due to selection of a terminate alternative attempts to propagate an
--- exception, the exception is ignored, but any other finalizations due
--- to be performed are performed.
---
---
--- TEST DESCRIPTION:
--- This test declares a nested controlled data type, and embeds an object
--- of that type within a protected type. Objects of the protected type
--- are created and destroyed, and the actions of the embedded controlled
--- object are checked. The container controlled type causes an exception
--- as the last part of it's finalization operation.
---
--- This test utilizes several tasks to accomplish the objective. The
--- tasks contain delays to ensure that the expected order of processing
--- is indeed accomplished.
---
--- Subtest 1:
--- local task object runs to normal completion
---
--- Subtest 2:
--- local task aborts a nested task to cause finalization
---
--- Subtest 3:
--- local task sleeps long enough to allow procedure started
--- asynchronously to go into infinite loop. Procedure is then aborted
--- via ATC, causing finalization of objects.
---
--- Subtest 4:
--- local task object takes terminate alternative, causing finalization
---
---
--- CHANGE HISTORY:
--- 06 JUN 95 SAIC Initial version
--- 05 APR 96 SAIC Documentation changes
--- 03 MAR 97 PWB.CTA Allowed two finalization orders for ATC test
--- 02 DEC 97 EDS Remove duplicate characters from check string.
---!
-
----------------------------------------------------------------- C761007_0
-
-with Ada.Finalization;
-package C761007_0 is
-
- type Internal is new Ada.Finalization.Controlled
- with record
- Effect : Character;
- end record;
-
- procedure Finalize( I: in out Internal );
-
- Side_Effect : String(1..80); -- way bigger than needed
- Side_Effect_Finger : Natural := 0;
-
-end C761007_0;
-
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-with TCTouch;
-package body C761007_0 is
-
- procedure Finalize( I : in out Internal ) is
- Previous_Side_Effect : Boolean := False;
- begin
- -- look to see if this character has been finalized yet
- for SEI in 1..Side_Effect_Finger loop
- Previous_Side_Effect := Previous_Side_Effect
- or Side_Effect(Side_Effect_Finger) = I.Effect;
- end loop;
-
- -- if not, then tack it on to the string, and touch the character
- if not Previous_Side_Effect then
- Side_Effect_Finger := Side_Effect_Finger +1;
- Side_Effect(Side_Effect_Finger) := I.Effect;
- TCTouch.Touch(I.Effect);
- end if;
-
- end Finalize;
-
-end C761007_0;
-
----------------------------------------------------------------- C761007_1
-
-with C761007_0;
-with Ada.Finalization;
-package C761007_1 is
-
- type Container is new Ada.Finalization.Controlled
- with record
- Effect : Character;
- Content : C761007_0.Internal;
- end record;
-
- procedure Finalize( C: in out Container );
-
- Side_Effect : String(1..80); -- way bigger than needed
- Side_Effect_Finger : Natural := 0;
-
- This_Exception_Is_Supposed_To_Be_Ignored : exception;
-
-end C761007_1;
-
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-with TCTouch;
-package body C761007_1 is
-
- procedure Finalize( C: in out Container ) is
- Previous_Side_Effect : Boolean := False;
- begin
- -- look to see if this character has been finalized yet
- for SEI in 1..Side_Effect_Finger loop
- Previous_Side_Effect := Previous_Side_Effect
- or Side_Effect(Side_Effect_Finger) = C.Effect;
- end loop;
-
- -- if not, then tack it on to the string, and touch the character
- if not Previous_Side_Effect then
- Side_Effect_Finger := Side_Effect_Finger +1;
- Side_Effect(Side_Effect_Finger) := C.Effect;
- TCTouch.Touch(C.Effect);
- end if;
-
- raise This_Exception_Is_Supposed_To_Be_Ignored;
-
- end Finalize;
-
-end C761007_1;
-
----------------------------------------------------------------- C761007_2
-with C761007_1;
-package C761007_2 is
-
- protected type Prot_W_Fin_Obj is
- procedure Set_Effects( Container, Filling: Character );
- private
- The_Data_Under_Test : C761007_1.Container;
- -- finalization for this will occur when the Prot_W_Fin_Obj object
- -- "goes out of existence" for whatever reason.
- end Prot_W_Fin_Obj;
-
-end C761007_2;
-
--- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
-
-package body C761007_2 is
-
- protected body Prot_W_Fin_Obj is
- procedure Set_Effects( Container, Filling: Character ) is
- begin
- The_Data_Under_Test.Effect := Container; -- A, etc.
- The_Data_Under_Test.Content.Effect := Filling; -- B, etc.
- end Set_Effects;
- end Prot_W_Fin_Obj;
-
-end C761007_2;
-
------------------------------------------------------------------- C761007
-
-with Report;
-with Impdef;
-with TCTouch;
-with C761007_0;
-with C761007_1;
-with C761007_2;
-procedure C761007 is
-
- task type Subtests( Outer, Inner : Character) is
- entry Ready;
- entry Complete;
- end Subtests;
-
- task body Subtests is
- Local_Prot_W_Fin_Obj : C761007_2.Prot_W_Fin_Obj;
- begin
- Local_Prot_W_Fin_Obj.Set_Effects( Outer, Inner );
-
- accept Ready;
-
- select
- accept Complete;
- or terminate; -- used in Subtest 4
- end select;
- exception
- -- the exception caused by the finalization of Local_Prot_W_Fin_Obj
- -- should never be visible to this scope.
- when others => Report.Failed("Exception in a Subtest object "
- & Outer & Inner);
- end Subtests;
-
- procedure Subtest_1 is
- -- check the case where "nothing special" happens.
-
- This_Subtest : Subtests( 'A', 'B' );
- begin
-
- This_Subtest.Ready;
- This_Subtest.Complete;
-
- while not This_Subtest'Terminated loop -- wait for finalization
- delay Impdef.Clear_Ready_Queue;
- end loop;
-
- -- in the finalization of This_Subtest, the controlled object embedded in
- -- the Prot_W_Fin_Obj will finalize. An exception is raised in the
- -- container object, after "touching" it's tag character.
- -- The finalization of the contained controlled object must be performed.
-
-
- TCTouch.Validate( "AB", "Item embedded in task" );
-
-
- exception
- when others => Report.Failed("Undesirable exception in Subtest_1");
-
- end Subtest_1;
-
- procedure Subtest_2 is
- -- check for explicit abort
-
- task Subtest_Task is
- entry Complete;
- end Subtest_Task;
-
- task body Subtest_Task is
-
- task Nesting;
- task body Nesting is
- Deep_Nesting : Subtests( 'E', 'F' );
- begin
- if Report.Ident_Bool( True ) then
- -- controlled objects have been created in the elaboration of
- -- Deep_Nesting. Deep_Nesting must call the Set_Effects operation
- -- in the Prot_W_Fin_Obj, and then hang waiting for the Complete
- -- entry call.
- Deep_Nesting.Ready;
- abort Deep_Nesting;
- else
- Report.Failed("Dead code in Nesting");
- end if;
- exception
- when others => Report.Failed("Exception in Subtest_Task.Nesting");
- end Nesting;
-
- Local_2 : C761007_2.Prot_W_Fin_Obj;
-
- begin
- -- Nesting has activated at this point, which implies the activation
- -- of Deep_Nesting as well.
-
- Local_2.Set_Effects( 'C', 'D' );
-
- -- wait for Nesting to terminate
-
- while not Nesting'Terminated loop
- delay Impdef.Clear_Ready_Queue;
- end loop;
-
- accept Complete;
-
- exception
- when others => Report.Failed("Exception in Subtest_Task");
- end Subtest_Task;
-
- begin
-
- -- wait for everything in Subtest_Task to happen
- Subtest_Task.Complete;
-
- while not Subtest_Task'Terminated loop -- wait for finalization
- delay Impdef.Clear_Ready_Queue;
- end loop;
-
- TCTouch.Validate( "EFCD", "Aborted nested task" );
-
- exception
- when others => Report.Failed("Undesirable exception in Subtest_2");
- end Subtest_2;
-
- procedure Subtest_3 is
- -- check abort caused by asynchronous transfer of control
-
- task Subtest_3_Task is
- entry Complete;
- end Subtest_3_Task;
-
- procedure Check_Atc_Operation is
- Check_Atc : C761007_2.Prot_W_Fin_Obj;
- begin
-
- Check_Atc.Set_Effects( 'G', 'H' );
-
-
- while Report.Ident_Bool( True ) loop -- wait to be aborted
- if Report.Ident_Bool( True ) then
- Impdef.Exceed_Time_Slice;
- delay Impdef.Switch_To_New_Task;
- else
- Report.Failed("Optimization prevention");
- end if;
- end loop;
-
- Report.Failed("Check_Atc_Operation loop completed");
-
- end Check_Atc_Operation;
-
- task body Subtest_3_Task is
- task Nesting is
- entry Complete;
- end Nesting;
-
- task body Nesting is
- Nesting_3 : C761007_2.Prot_W_Fin_Obj;
- begin
- Nesting_3.Set_Effects( 'G', 'H' );
-
- -- give Check_Atc_Operation sufficient time to perform it's
- -- Set_Effects on it's local Prot_W_Fin_Obj object
- delay Impdef.Clear_Ready_Queue;
-
- accept Complete;
- exception
- when others => Report.Failed("Exception in Subtest_3_Task.Nesting");
- end Nesting;
-
- Local_3 : C761007_2.Prot_W_Fin_Obj;
-
- begin -- Subtest_3_Task
-
- Local_3.Set_Effects( 'I', 'J' );
-
- select
- Nesting.Complete;
- then abort ---------------------------------------------------- cause KL
- Check_ATC_Operation;
- end select;
-
- accept Complete;
-
- exception
- when others => Report.Failed("Exception in Subtest_3_Task");
- end Subtest_3_Task;
-
- begin -- Subtest_3
- Subtest_3_Task.Complete;
-
- while not Subtest_3_Task'Terminated loop -- wait for finalization
- delay Impdef.Clear_Ready_Queue;
- end loop;
-
- TCTouch.Validate( "GHIJ", "Asynchronously aborted operation" );
-
- exception
- when others => Report.Failed("Undesirable exception in Subtest_3");
- end Subtest_3;
-
- procedure Subtest_4 is
- -- check the case where transfer is caused by terminate alternative
- -- highly similar to Subtest_1
-
- This_Subtest : Subtests( 'M', 'N' );
- begin
-
- This_Subtest.Ready;
- -- don't call This_Subtest.Complete;
-
- exception
- when others => Report.Failed("Undesirable exception in Subtest_4");
-
- end Subtest_4;
-
-begin -- Main test procedure.
-
- Report.Test ("C761007", "Check that if a finalize procedure invoked by " &
- "a transfer of control or selection of a " &
- "terminate alternative attempts to propagate " &
- "an exception, the exception is ignored, but " &
- "any other finalizations due to be performed " &
- "are performed" );
-
- Subtest_1; -- checks internal
-
- Subtest_2; -- checks internal
-
- Subtest_3; -- checks internal
-
- Subtest_4;
- TCTouch.Validate( "MN", "transfer due to terminate alternative" );
-
- Report.Result;
-
-end C761007;