ada: Follow-up improvement to implementation of storage models

It avoids to recreate an actual subtype for an explicit dereference.

gcc/ada/

	* sem_util.adb (Get_Actual_Subtype): For an explicit dereference,
	return the Actual_Designated_Subtype if it is present.
	(Get_Actual_Subtype_If_Available): Likewise.
This commit is contained in:
Eric Botcazou 2023-01-25 15:55:34 +01:00 committed by Marc Poulhiès
parent b54fd57a1b
commit cbf64a8037

View file

@ -10017,6 +10017,14 @@ package body Sem_Util is
then
return Actual_Subtype (Entity (N));
-- Similarly, if we have an explicit dereference, then we get the
-- actual subtype from the node itself if one has been built.
elsif Nkind (N) = N_Explicit_Dereference
and then Present (Actual_Designated_Subtype (N))
then
return Actual_Designated_Subtype (N);
-- Actual subtype of unchecked union is always itself. We never need
-- the "real" actual subtype. If we did, we couldn't get it anyway
-- because the discriminant is not available. The restrictions on
@ -10130,6 +10138,14 @@ package body Sem_Util is
then
return Actual_Subtype (Entity (N));
-- Similarly, if we have an explicit dereference, then we get the
-- actual subtype from the node itself if one has been built.
elsif Nkind (N) = N_Explicit_Dereference
and then Present (Actual_Designated_Subtype (N))
then
return Actual_Designated_Subtype (N);
-- Otherwise the Etype of N is returned unchanged
else