aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-01-25 15:55:34 +0100
committerMarc Poulhiès <poulhies@adacore.com>2023-05-16 10:30:57 +0200
commitcbf64a8037904b0b4bba99e16e5913ba225e7180 (patch)
tree69613804082cd8958f99c4a1115f8e12c9ea40ed /gcc
parentb54fd57a1b3429542286c3bea7c38cce931064f7 (diff)
downloadgcc-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.adb16
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