[Ada] Crash on derived type with rep. clause and renamed discriminant
authorEd Schonberg <schonberg@adacore.com>
Fri, 8 May 2020 13:27:24 +0000 (09:27 -0400)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 6 Jul 2020 11:35:12 +0000 (07:35 -0400)
gcc/ada/

* exp_ch5.adb (Find_Component): If the target type is a derived
record type and the required component is a discriminant that is
renamed in the derived type declaration, use the name of the
original discriminant to locate the intended target component.

gcc/ada/exp_ch5.adb

index a4916ef4af2a0b0798037492a61fd80a54302350..caacda6e6f0eeba033b677d5190c9d5fcf999f79 100644 (file)
@@ -1594,6 +1594,18 @@ package body Exp_Ch5 is
             while Present (C) loop
                if Chars (C) = Chars (Comp) then
                   return C;
+
+               --  The component may be a renamed discriminant, in
+               --  which case check against the name of the original
+               --  discriminant of the parent type.
+
+               elsif Is_Derived_Type (Scope (Comp))
+                 and then Ekind (Comp) = E_Discriminant
+                 and then Present (Corresponding_Discriminant (Comp))
+                 and then
+                   Chars (C) = Chars (Corresponding_Discriminant (Comp))
+               then
+                  return C;
                end if;
 
                Next_Entity (C);