aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/ada/acats/tests/c7/c761002.a
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/ada/acats/tests/c7/c761002.a')
-rw-r--r--gcc/testsuite/ada/acats/tests/c7/c761002.a245
1 files changed, 0 insertions, 245 deletions
diff --git a/gcc/testsuite/ada/acats/tests/c7/c761002.a b/gcc/testsuite/ada/acats/tests/c7/c761002.a
deleted file mode 100644
index 5b807bba720..00000000000
--- a/gcc/testsuite/ada/acats/tests/c7/c761002.a
+++ /dev/null
@@ -1,245 +0,0 @@
--- C761002.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 objects of a controlled type that are created
--- by an allocator are finalized at the appropriate time. In
--- particular, check that such objects are not finalized due to
--- completion of the master in which they were allocated if the
--- corresponding access type is declared outside of that master.
---
--- Check that Unchecked_Deallocation of a controlled
--- object causes finalization of that object.
---
--- TEST DESCRIPTION:
--- This test derives a type from Ada.Finalization.Controlled, and
--- declares access types to that type in various scope scenarios.
--- The dispatching procedure Finalize is redefined for the derived
--- type to perform a check that it has been called at the
--- correct time. This is accomplished using a global variable
--- which indicates what state the software is currently
--- executing. The test utilizes the TCTouch facilities to
--- verify that Finalize is called the correct number of times, at
--- the correct times. Several calls are made to validate passing
--- the null string to check that Finalize has NOT been called at
--- that point.
---
---
--- CHANGE HISTORY:
--- 06 Dec 94 SAIC ACVC 2.0
---
---!
-
-with Ada.Finalization;
-package C761002_0 is
- type Global is new Ada.Finalization.Controlled with null record;
- procedure Finalize( It: in out Global );
-
- type Second is new Ada.Finalization.Limited_Controlled with null record;
- procedure Finalize( It: in out Second );
-end C761002_0;
-
-with Report;
-with TCTouch;
-package body C761002_0 is
-
- procedure Finalize( It: in out Global ) is
- begin
- TCTouch.Touch('F'); ------------------------------------------------- F
- end Finalize;
-
- procedure Finalize( It: in out Second ) is
- begin
- TCTouch.Touch('S'); ------------------------------------------------- S
- end Finalize;
-end C761002_0;
-
-with Report;
-with TCTouch;
-with C761002_0;
-with Unchecked_Deallocation;
-procedure C761002 is
-
- -- check the straightforward case
- procedure Subtest_1 is
- type Access_1 is access C761002_0.Global;
- V1 : Access_1;
- procedure Allocate is
- V2 : Access_1;
- begin
- V2 := new C761002_0.Global;
- V1 := V2; -- "dead" assignment must not be optimized away due to
- -- finalization "side effects", many more of these follow
- end Allocate;
- begin
- Allocate;
- -- no calls to Finalize should have occurred at this point
- TCTouch.Validate("","Allocated nested, retained");
- end Subtest_1;
-
- -- check Unchecked_Deallocation
- procedure Subtest_2 is
- type Access_2 is access C761002_0.Global;
- procedure Free is
- new Unchecked_Deallocation(C761002_0.Global, Access_2);
- V1 : Access_2;
- V2 : Access_2;
-
- procedure Allocate is
- begin
- V1 := new C761002_0.Global;
- V2 := new C761002_0.Global;
- end Allocate;
-
- begin
- Allocate;
- -- no calls to Finalize should have occurred at this point.
- TCTouch.Validate("","Allocated nested, non-local");
-
- Free(V1); -- instance of Unchecked_Deallocation
- -- should cause the finalization of V1.all
- TCTouch.Validate("F","Unchecked Deallocation");
- end Subtest_2; -- leaving this scope should cause the finalization of V2.all
-
- -- check various master-exit scenarios
- -- the "Fake" parameters are used to avoid unwanted optimizations
- procedure Subtest_3 is
- procedure With_Local_Block is
- type Access_3 is access C761002_0.Global;
- V1 : Access_3;
- begin
- declare
- V2 : Access_3 := new C761002_0.Global;
- begin
- V1 := V2;
- end;
- TCTouch.Validate("","Local Block, normal exit");
- -- the allocated object should be finalized on leaving this scope
- end With_Local_Block;
-
- procedure With_Local_Block_Return(Fake: Integer) is
- type Access_4 is access C761002_0.Global;
- V1 : Access_4 := new C761002_0.Global;
- begin
- if Fake = 0 then
- declare
- V2 : Access_4;
- begin
- V2 := new C761002_0.Global;
- return; -- the two allocated objects should be finalized
- end; -- upon leaving this scope
- else
- V1 := null;
- end if;
- end With_Local_Block_Return;
-
- procedure With_Goto(Fake: Integer) is
- type Access_5 is access C761002_0.Global;
- V1 : Access_5 := new C761002_0.Global;
- V2 : Access_5;
- V3 : Access_5;
- begin
- if Fake = 0 then
- declare
- type Access_6 is access C761002_0.Second;
- V6 : Access_6;
- begin
- V6 := new C761002_0.Second;
- goto check;
- end;
- else
- V2 := V1;
- end if;
- V3 := V2;
-<<check>>
- TCTouch.Validate("S","goto past master end");
- end With_Goto;
-
- begin
- With_Local_Block;
- TCTouch.Validate("F","Local Block, normal exit, after master");
-
- With_Local_Block_Return( Report.Ident_Int(0) );
- TCTouch.Validate("FF","Local Block, return from block");
-
- With_Goto( Report.Ident_Int(0) );
- TCTouch.Validate("F","With Goto");
-
- end Subtest_3;
-
- procedure Subtest_4 is
-
- Oops : exception;
-
- procedure Alley( Fake: Integer ) is
- type Access_1 is access C761002_0.Global;
- V1 : Access_1;
- begin
- V1 := new C761002_0.Global;
- if Fake = 1 then
- raise Oops;
- end if;
- V1 := null;
- end Alley;
-
- begin
- Catch: begin
- Alley( Report.Ident_Int(1) );
- exception
- when Oops => TCTouch.Validate("F","leaving via exception");
- when others => Report.Failed("Wrong exception");
- end Catch;
- end Subtest_4;
-
-begin -- Main test procedure.
-
- Report.Test ("C761002", "Check that objects of a controlled type created "
- & "by an allocator are finalized appropriately. "
- & "Check that Unchecked_Deallocation of a "
- & "controlled object causes finalization "
- & "of that object" );
-
- Subtest_1;
- -- leaving the scope of the access type should finalize the
- -- collection
- TCTouch.Validate("F","Allocated nested, Subtest 1");
-
- Subtest_2;
- -- Unchecked_Deallocation already finalized one of the two
- -- objects allocated, the other should be the only one finalized
- -- at leaving the scope of the access type.
- TCTouch.Validate("F","Allocated non-local");
-
- Subtest_3;
- -- there should be no remaining finalizations from this subtest
- TCTouch.Validate("","Localized objects");
-
- Subtest_4;
- -- there should be no remaining finalizations from this subtest
- TCTouch.Validate("","Exception testing");
-
- Report.Result;
-
-end C761002;