aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2022-11-29 12:29:30 +0100
committerMarc Poulhiès <poulhies@adacore.com>2022-12-01 14:53:54 +0100
commit798c08ca4bf3681444426093263e9e6746d1c32b (patch)
treeeda0b90eab97594b1fc4b9a2f4fdcc04b312d318 /gcc
parent82cf82c4610dbf2a1021841fea3700a477246b79 (diff)
downloadgcc-798c08ca4bf3681444426093263e9e6746d1c32b.zip
gcc-798c08ca4bf3681444426093263e9e6746d1c32b.tar.gz
gcc-798c08ca4bf3681444426093263e9e6746d1c32b.tar.bz2
ada: Strip conversions for the implementation of storage models
This is necessary for unconstrained allocators with qualified expression. gcc/ada/ * gcc-interface/trans.cc (get_storage_model_access): Strip any type conversion around the node before looking into it.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/gcc-interface/trans.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/trans.cc b/gcc/ada/gcc-interface/trans.cc
index b9d7c01..a012271 100644
--- a/gcc/ada/gcc-interface/trans.cc
+++ b/gcc/ada/gcc-interface/trans.cc
@@ -4400,6 +4400,11 @@ get_storage_model_access (Node_Id gnat_node, Entity_Id *gnat_smo)
return;
}
+ /* Now strip any type conversion from GNAT_NODE. */
+ if (Nkind (gnat_node) == N_Type_Conversion
+ || Nkind (gnat_node) == N_Unchecked_Type_Conversion)
+ gnat_node = Expression (gnat_node);
+
while (node_is_component (gnat_node))
gnat_node = Prefix (gnat_node);