aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch12.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-04-01 21:57:21 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-05-29 10:23:18 +0200
commitbf25f6fc571c0f3b1ca1c70106730104ea91c65a (patch)
tree32320650bc5eef9f2cb1cd09d48b167ca0ce5dc6 /gcc/ada/sem_ch12.adb
parentdedcfceaf012675d5c5c4f34a7cd97d23357d3f3 (diff)
downloadgcc-bf25f6fc571c0f3b1ca1c70106730104ea91c65a.zip
gcc-bf25f6fc571c0f3b1ca1c70106730104ea91c65a.tar.gz
gcc-bf25f6fc571c0f3b1ca1c70106730104ea91c65a.tar.bz2
ada: Fix spurious error on nested instantiations with generic renaming
The problem is that the renaming slightly changes the form of a global reference that was saved during the analysis of a generic package, and that is sufficient to fool the code adjusting global references during the instantiation. gcc/ada/ * sem_ch12.adb (Copy_Generic_Node): Test the original node kind for the sake of consistency. For identifiers and other entity names and operators, accept an expanded name as associated node. Replace "or" with "or else" in condtion and fix its formatting.
Diffstat (limited to 'gcc/ada/sem_ch12.adb')
-rw-r--r--gcc/ada/sem_ch12.adb27
1 files changed, 18 insertions, 9 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index a9a3e32..2562d1a0 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -7953,11 +7953,11 @@ package body Sem_Ch12 is
-- Special casing for identifiers and other entity names and operators
- if Nkind (New_N) in N_Character_Literal
- | N_Expanded_Name
- | N_Identifier
- | N_Operator_Symbol
- | N_Op
+ if Nkind (N) in N_Character_Literal
+ | N_Expanded_Name
+ | N_Identifier
+ | N_Operator_Symbol
+ | N_Op
then
if not Instantiating then
@@ -8161,6 +8161,15 @@ package body Sem_Ch12 is
then
Set_Entity (New_N, Assoc);
+ -- Cope with the rewriting into expanded name that may have
+ -- occurred in between, e.g. in Check_Generic_Child_Unit for
+ -- generic renaming declarations.
+
+ elsif Nkind (Assoc) = N_Expanded_Name then
+ Rewrite (N, New_Copy_Tree (Assoc));
+ Set_Associated_Node (N, Assoc);
+ return Copy_Generic_Node (N, Parent_Id, Instantiating);
+
-- The name in the call may be a selected component if the
-- call has not been analyzed yet, as may be the case for
-- pre/post conditions in a generic unit.
@@ -8171,10 +8180,10 @@ package body Sem_Ch12 is
Set_Entity (New_N, Entity (Name (Assoc)));
elsif Nkind (Assoc) in N_Entity
- and then (Expander_Active or
- (GNATprove_Mode
- and then not In_Spec_Expression
- and then not Inside_A_Generic))
+ and then (Expander_Active
+ or else (GNATprove_Mode
+ and then not In_Spec_Expression
+ and then not Inside_A_Generic))
then
-- Inlining case: we are copying a tree that contains
-- global entities, which are preserved in the copy to be