To reliably retrieve the nominal unconstrained type of object declared in
extended return statement we need to rely on the Original_Node.
gcc/ada/ChangeLog:
* sem_ch3.adb (Check_Return_Subtype_Indication): Use Original_Node.
-- to recover the nominal unconstrained type.
if Is_Constr_Subt_For_U_Nominal (Obj_Typ) then
- if Nkind (Object_Definition (Obj_Decl)) = N_Subtype_Indication then
- Obj_Typ := Entity (Subtype_Mark (Object_Definition (Obj_Decl)));
- else
- Obj_Typ := Etype (Obj_Typ);
- end if;
+ Obj_Typ := Entity (Original_Node (Object_Definition (Obj_Decl)));
pragma Assert (not Is_Constrained (Obj_Typ));
end if;