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
This commit is contained in:
parent
5128d641ba
commit
e2d3a4bba9
|
@ -1,3 +1,11 @@
|
|||
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.
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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)
|
||||
/* 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 (ptr)) = new_ptr;
|
||||
DECL_ARTIFICIAL (TYPE_NAME (ptr)) = 0;
|
||||
DECL_ORIGINAL_TYPE (TYPE_NAME (t)) = new_ptr;
|
||||
DECL_ARTIFICIAL (TYPE_NAME (t)) = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Now handle updating the allocation record, what the thin pointer
|
||||
|
|
Loading…
Reference in New Issue