diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2023-01-25 15:55:34 +0100 |
---|---|---|
committer | Marc Poulhiès <poulhies@adacore.com> | 2023-05-16 10:30:57 +0200 |
commit | cbf64a8037904b0b4bba99e16e5913ba225e7180 (patch) | |
tree | 69613804082cd8958f99c4a1115f8e12c9ea40ed /gcc | |
parent | b54fd57a1b3429542286c3bea7c38cce931064f7 (diff) | |
download | gcc-cbf64a8037904b0b4bba99e16e5913ba225e7180.zip gcc-cbf64a8037904b0b4bba99e16e5913ba225e7180.tar.gz gcc-cbf64a8037904b0b4bba99e16e5913ba225e7180.tar.bz2 |
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.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_util.adb | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index 8bce022..ad74de6 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -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 |