aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2021-06-30 18:11:11 -0400
committerPierre-Marie de Rodat <derodat@adacore.com>2021-09-21 15:24:55 +0000
commitc36332031cff305ceb0d1924ee4b2cedbd85023a (patch)
tree966eaf6bb2596009896944c2ca5a3304050e9011 /gcc
parent4d027eea556463895e524514c947b080a173b6e9 (diff)
downloadgcc-c36332031cff305ceb0d1924ee4b2cedbd85023a.zip
gcc-c36332031cff305ceb0d1924ee4b2cedbd85023a.tar.gz
gcc-c36332031cff305ceb0d1924ee4b2cedbd85023a.tar.bz2
[Ada] Refine patch for spurious link error involving discriminated types
gcc/ada/ * sem_ch3.adb (Process_Discriminant_Expressions): If the constraint is for a Component_Definition that appears in a Component_Declaration, the entity to be used to create the potentially global symbol is the Defining_Identifier of the Component_Declaration.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch3.adb29
1 files changed, 23 insertions, 6 deletions
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 6a93870..b233c56 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -10502,13 +10502,30 @@ package body Sem_Ch3 is
if Expander_Active
and then Comes_From_Source (Def)
and then not Is_Subprogram (Current_Scope)
- and then Nkind (Parent (Def)) in
- N_Object_Declaration | N_Component_Declaration
then
- Force_Evaluation (
- Discr_Expr (J),
- Related_Id => Defining_Identifier (Parent (Def)),
- Discr_Number => J);
+ declare
+ Id : Entity_Id := Empty;
+ begin
+ if Nkind (Parent (Def)) = N_Object_Declaration then
+ Id := Defining_Identifier (Parent (Def));
+
+ elsif Nkind (Parent (Def)) = N_Component_Definition
+ and then
+ Nkind (Parent (Parent (Def)))
+ = N_Component_Declaration
+ then
+ Id := Defining_Identifier (Parent (Parent (Def)));
+ end if;
+
+ if Present (Id) then
+ Force_Evaluation (
+ Discr_Expr (J),
+ Related_Id => Id,
+ Discr_Number => J);
+ else
+ Force_Evaluation (Discr_Expr (J));
+ end if;
+ end;
else
Force_Evaluation (Discr_Expr (J));
end if;