Compiler aborts on an instance body that has a reference to a selected
component of a local type extension, when the component is inherited
from an ancestor type declared outside of the generic being
instantiated.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* exp_ch3.adb (Expand_Record_Extension): Set Parent_Subtype on
the type extension when within a generic unit, even though
expansion is disabled, to allow for proper resolution of
selected components inherited from an ancestor.
diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -7782,9 +7782,14 @@ package body Exp_Ch3 is
-- Expand_Record_Extension is called directly from the semantics, so
-- we must check to see whether expansion is active before proceeding,
-- because this affects the visibility of selected components in bodies
- -- of instances.
+ -- of instances. Within a generic we still need to set Parent_Subtype
+ -- link because the visibility of inherited components will have to be
+ -- verified in subsequent instances.
if not Expander_Active then
+ if Inside_A_Generic and then Ekind (T) = E_Record_Type then
+ Set_Parent_Subtype (T, Etype (T));
+ end if;
return;
end if;