aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2021-10-05 15:29:44 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-05-26 09:29:17 +0200
commitfd3eff65551876a04febca1621d7d19f9390aab6 (patch)
tree74fa0b2f004643c6bb7cfd948ca9a44e001082b7
parent4f591201821b4e236f79486fa3ae881a8b2d5212 (diff)
downloadgcc-fd3eff65551876a04febca1621d7d19f9390aab6.zip
gcc-fd3eff65551876a04febca1621d7d19f9390aab6.tar.gz
gcc-fd3eff65551876a04febca1621d7d19f9390aab6.tar.bz2
ada: Fix handling of Global contracts inside generic subprograms
Routine Get_Argument works differently for generic units (as explained in its comment), but it failed to reliably detect such units when their kind is temporarily made non-generic (for resolving recursive calls, as explained in the comment at the end of Is_Generic_Declaration_Or_Body). With this patch the frontend will look at the decorated expression of the Global contract attached to the Global aspect; previously it was looking at the undecorated expression attached to the corresponding pragma. gcc/ada/ * sem_prag.adb (Get_Argument): Improve detection of generic units.
-rw-r--r--gcc/ada/sem_prag.adb4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/ada/sem_prag.adb b/gcc/ada/sem_prag.adb
index d66e561..96ea172 100644
--- a/gcc/ada/sem_prag.adb
+++ b/gcc/ada/sem_prag.adb
@@ -31650,7 +31650,9 @@ package body Sem_Prag is
-- to save the global references in the generic context.
if From_Aspect_Specification (Prag)
- and then (Present (Context_Id) and then Is_Generic_Unit (Context_Id))
+ and then Present (Context_Id)
+ and then
+ Is_Generic_Declaration_Or_Body (Unit_Declaration_Node (Context_Id))
then
return Corresponding_Aspect (Prag);