aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2024-12-13 19:17:00 +0100
committerMarc Poulhiès <dkm@gcc.gnu.org>2025-01-06 10:14:49 +0100
commitad8242d616da64a03680a1d304910cdb0f3ceb18 (patch)
tree8e935f3a39ca73dad485da819c44c409bfdda6f4
parent0d736433f9261fb9705f860a2e41cc407ecd972c (diff)
downloadgcc-ad8242d616da64a03680a1d304910cdb0f3ceb18.zip
gcc-ad8242d616da64a03680a1d304910cdb0f3ceb18.tar.gz
gcc-ad8242d616da64a03680a1d304910cdb0f3ceb18.tar.bz2
ada: Streamline runtime support of finalization collections
Finalization collections are declared as (limited) controlled types so that they can be naturally attached to a finalization master, but the same result can be achieved by means of (limited) finalizable types, which need not be tagged and thus avoid dragging the runtime support of tagged types. gcc/ada/ChangeLog: * libgnat/s-finpri.ads: Remove clause for Ada.Finalization. (Finalization_Collection): Change to limited private type with the Finalizable aspect. (Initialize): Remove "overriding" keyword. (Finalize): Likewise. * libgnat/s-finpri.adb (Initialize): Likewise. (Finalize): Likewise.
-rw-r--r--gcc/ada/libgnat/s-finpri.adb8
-rw-r--r--gcc/ada/libgnat/s-finpri.ads23
2 files changed, 12 insertions, 19 deletions
diff --git a/gcc/ada/libgnat/s-finpri.adb b/gcc/ada/libgnat/s-finpri.adb
index a6c9db3..171fe15 100644
--- a/gcc/ada/libgnat/s-finpri.adb
+++ b/gcc/ada/libgnat/s-finpri.adb
@@ -196,9 +196,7 @@ package body System.Finalization_Primitives is
-- Finalize --
--------------
- overriding procedure Finalize
- (Collection : in out Finalization_Collection)
- is
+ procedure Finalize (Collection : in out Finalization_Collection) is
Curr_Ptr : Collection_Node_Ptr;
Exc_Occur : Exception_Occurrence;
Finalization_Exception_Raised : Boolean := False;
@@ -380,9 +378,7 @@ package body System.Finalization_Primitives is
-- Initialize --
----------------
- overriding procedure Initialize
- (Collection : in out Finalization_Collection)
- is
+ procedure Initialize (Collection : in out Finalization_Collection) is
begin
-- The dummy head must point to itself in both directions
diff --git a/gcc/ada/libgnat/s-finpri.ads b/gcc/ada/libgnat/s-finpri.ads
index a61a7d7..2c89588 100644
--- a/gcc/ada/libgnat/s-finpri.ads
+++ b/gcc/ada/libgnat/s-finpri.ads
@@ -29,14 +29,13 @@
-- --
------------------------------------------------------------------------------
-with Ada.Finalization;
-
with System.OS_Locks;
with System.Storage_Elements;
-- This package encapsulates the types and operations used by the compiler
--- to support finalization of objects of Ada controlled types (types derived
--- from types Controlled and Limited_Controlled).
+-- to support finalization of objects of finalizable types (types derived
+-- from standard Ada types Controlled and Limited_Controlled, as well as
+-- types declared with the GNAT Finalizable aspect).
package System.Finalization_Primitives with Preelaborate is
@@ -130,8 +129,10 @@ package System.Finalization_Primitives with Preelaborate is
-- object itself is managed via a Master_Node attached to its finalization
-- master.
- type Finalization_Collection is
- new Ada.Finalization.Limited_Controlled with private;
+ type Finalization_Collection is limited private
+ with Finalizable => (Initialize => Initialize,
+ Finalize => Finalize,
+ Relaxed_Finalization => Standard.False);
-- Objects of this type encapsulate a set of zero or more controlled
-- objects associated with an access type. The compiler ensures that
-- each finalization collection is in turn associated with a finalization
@@ -142,12 +143,10 @@ package System.Finalization_Primitives with Preelaborate is
-- A reference to a collection. Since this type may not be used to
-- allocate objects, its storage size is zero.
- overriding procedure Initialize
- (Collection : in out Finalization_Collection);
+ procedure Initialize (Collection : in out Finalization_Collection);
-- Initializes the dummy head of a collection
- overriding procedure Finalize
- (Collection : in out Finalization_Collection);
+ procedure Finalize (Collection : in out Finalization_Collection);
-- Finalizes each object that has been associated with a finalization
-- collection, in some arbitrary order. Calls to this procedure with
-- a collection that has already been finalized have no effect.
@@ -244,9 +243,7 @@ private
-- Finalization collection type structure
- type Finalization_Collection is
- new Ada.Finalization.Limited_Controlled with
- record
+ type Finalization_Collection is limited record
Head : aliased Collection_Node;
-- The head of the circular doubly-linked list of collection nodes