[Ada] Crash on derived type with rep. clause and renamed discriminant

Message ID 20200706113855.GA135575@adacore.com
State New
Headers show
Series
  • [Ada] Crash on derived type with rep. clause and renamed discriminant
Related show

Commit Message

Pierre-Marie de Rodat July 6, 2020, 11:38 a.m.
This patch fixes a compiler abort on a declaration of subtype of a
derived type DT whose declaration renames a discriminant of its parent
type T, when there is a record representation clause for DT.

Tested on x86_64-pc-linux-gnu, committed on trunk

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.

Patch

diff --git a/gcc/ada/exp_ch5.adb b/gcc/ada/exp_ch5.adb
--- a/gcc/ada/exp_ch5.adb
+++ b/gcc/ada/exp_ch5.adb
@@ -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);