aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/gcc-interface/decl.c
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2020-09-12 12:36:30 +0200
committerEric Botcazou <ebotcazou@adacore.com>2020-09-12 12:37:47 +0200
commit4965be0b3388557643114c1ec20bd206f0bda1df (patch)
tree6a7a512bb146d15d24acc1c21c82bb69d89cfb4a /gcc/ada/gcc-interface/decl.c
parentac35c090821f92f41e83d1688eaf2e2b4946afb1 (diff)
downloadgcc-4965be0b3388557643114c1ec20bd206f0bda1df.zip
gcc-4965be0b3388557643114c1ec20bd206f0bda1df.tar.gz
gcc-4965be0b3388557643114c1ec20bd206f0bda1df.tar.bz2
Accept absolute address clause for array of UNC nominal subtype
This changes the compiler to accept again absolute address clause for aliased array of unconstrained nominal subtype, instead of erroring out in this case. gcc/ada/ChangeLog: * gcc-interface/decl.c (gnat_to_gnu_entity) <E_Variable>: Only give a warning for the overlay of an aliased array with an unconstrained nominal subtype if the address is absolute.
Diffstat (limited to 'gcc/ada/gcc-interface/decl.c')
-rw-r--r--gcc/ada/gcc-interface/decl.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 2b7392c..d19f5aa 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -1245,6 +1245,7 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
&& TREE_OPERAND (gnu_address, 1) == off)
gnu_address = TREE_OPERAND (gnu_address, 0);
+
/* This is the pattern built for an overaligned object. */
else if (TREE_CODE (gnu_address) == POINTER_PLUS_EXPR
&& TREE_CODE (TREE_OPERAND (gnu_address, 1))
@@ -1255,6 +1256,18 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
= build2 (POINTER_PLUS_EXPR, gnu_type,
TREE_OPERAND (gnu_address, 0),
TREE_OPERAND (TREE_OPERAND (gnu_address, 1), 0));
+
+ /* We make an exception for an absolute address but we warn
+ that there is a descriptor at the start of the object. */
+ else if (TREE_CODE (gnu_address) == INTEGER_CST)
+ {
+ post_error_ne ("??aliased object& with unconstrained "
+ "array nominal subtype", gnat_clause,
+ gnat_entity);
+ post_error ("\\starts with a descriptor whose size is "
+ "given by ''Descriptor_Size", gnat_clause);
+ }
+
else
{
post_error_ne ("aliased object& with unconstrained array "