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:
parent
b54fd57a1b
commit
cbf64a8037
1 changed files with 16 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue