aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-10-27 11:34:31 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-11-21 10:57:42 +0100
commit706535a9a2a726c388a3127fffc0848fb33bb951 (patch)
treec77e02033ad4b035ae9e36349d0bfcf099829e19
parent5c7854b28f56634cc3a8afb7889d1a76883a0cf3 (diff)
downloadgcc-706535a9a2a726c388a3127fffc0848fb33bb951.zip
gcc-706535a9a2a726c388a3127fffc0848fb33bb951.tar.gz
gcc-706535a9a2a726c388a3127fffc0848fb33bb951.tar.bz2
ada: Further cleanup in finalization machinery
The bodies of generic units are instantiated separately by GNAT at the end of the processing of the compilation unit. This requires the deferral of the generation of cleanups and finalization actions in enclosing scopes, except for instantiations in generic units where they are not generated. The criterion used to detect this latter case is Inside_A_Generic, but this global variable is not properly updated during the instantiation of generic bodies, leading to problems with nested instantiations, so it is changed to Expander_Active instead. As a matter of fact, the exact same idiom is used a few lines above to clear the Needs_Body variable. gcc/ada/ * sem_ch12.adb (Analyze_Package_Instantiation): Test Expander_Active to detect generic contexts for the generation of cleanup actions.
-rw-r--r--gcc/ada/sem_ch12.adb5
1 files changed, 1 insertions, 4 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 31fcbed..7c645c4 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -4824,10 +4824,7 @@ package body Sem_Ch12 is
-- Cleanup actions are not generated within generic units
-- or in the formal part of generic units.
- if Inside_A_Generic
- or else Is_Generic_Unit (S)
- or else Ekind (S) = E_Void
- then
+ if not Expander_Active then
exit;
-- For package scopes, cleanup actions are generated only