aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2010-12-13 18:10:49 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2010-12-13 18:10:49 +0000
commite2d3a4bba91302346202e83b4c79a4d2c68d856c (patch)
tree426e4bc3cd3eadacc2a1434004a4933e098e1a8c /gcc
parent5128d641baf69fc385182d30d93c8e1cdc0bae0b (diff)
downloadgcc-e2d3a4bba91302346202e83b4c79a4d2c68d856c.zip
gcc-e2d3a4bba91302346202e83b4c79a4d2c68d856c.tar.gz
gcc-e2d3a4bba91302346202e83b4c79a4d2c68d856c.tar.bz2
decl.c (gnat_to_gnu_entity): Build a stub DECL for the dummy fat pointer type in the unconstrained array case.
* gcc-interface/decl.c (gnat_to_gnu_entity) <E_General_Access_Type>: Build a stub DECL for the dummy fat pointer type in the unconstrained array case. * gcc-interface/utils.c (update_pointer_to): Set the DECL_ORIGINAL_TYPE for all the variants in the fat pointer case. From-SVN: r167758
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/gcc-interface/decl.c5
-rw-r--r--gcc/ada/gcc-interface/utils.c17
3 files changed, 22 insertions, 8 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index a42758d..4972d30 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,13 @@
2010-12-13 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/decl.c (gnat_to_gnu_entity) <E_General_Access_Type>:
+ Build a stub DECL for the dummy fat pointer type in the unconstrained
+ array case.
+ * gcc-interface/utils.c (update_pointer_to): Set the DECL_ORIGINAL_TYPE
+ for all the variants in the fat pointer case.
+
+2010-12-13 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/trans.c (can_be_lower_p): New predicate.
(Loop_Statement_to_gnu): Do not generate the entry condition if we know
that it will be true.
diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c
index 8980bb2..b45033f 100644
--- a/gcc/ada/gcc-interface/decl.c
+++ b/gcc/ada/gcc-interface/decl.c
@@ -3566,6 +3566,11 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
TYPE_DUMMY_P (gnu_array_type) = 1;
gnu_type = make_node (RECORD_TYPE);
+ /* Build a stub DECL to trigger the special processing for fat
+ pointer types in gnat_pushdecl. */
+ TYPE_NAME (gnu_type)
+ = create_type_stub_decl
+ (create_concat_name (gnat_desig_equiv, "XUP"), gnu_type);
SET_TYPE_UNCONSTRAINED_ARRAY (gnu_type, gnu_desig_type);
TYPE_POINTER_TO (gnu_desig_type) = gnu_type;
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index fa2d096..d044957 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -3501,15 +3501,16 @@ update_pointer_to (tree old_type, tree new_type)
{
TYPE_MAIN_VARIANT (t) = new_ptr;
SET_TYPE_UNCONSTRAINED_ARRAY (t, new_type);
- }
- /* And show the original pointer NEW_PTR to the debugger. This is the
- counterpart of the equivalent processing in gnat_pushdecl when the
- unconstrained array type is frozen after access types to it. */
- if (TYPE_NAME (ptr) && TREE_CODE (TYPE_NAME (ptr)) == TYPE_DECL)
- {
- DECL_ORIGINAL_TYPE (TYPE_NAME (ptr)) = new_ptr;
- DECL_ARTIFICIAL (TYPE_NAME (ptr)) = 0;
+ /* And show the original pointer NEW_PTR to the debugger. This is
+ the counterpart of the special processing for fat pointer types
+ in gnat_pushdecl, but when the unconstrained array type is only
+ frozen after access types to it. */
+ if (TYPE_NAME (t) && TREE_CODE (TYPE_NAME (t)) == TYPE_DECL)
+ {
+ DECL_ORIGINAL_TYPE (TYPE_NAME (t)) = new_ptr;
+ DECL_ARTIFICIAL (TYPE_NAME (t)) = 0;
+ }
}
/* Now handle updating the allocation record, what the thin pointer