From: Eric Botcazou Date: Mon, 13 Dec 2010 18:10:49 +0000 (+0000) Subject: decl.c (gnat_to_gnu_entity): Build a stub DECL for the dummy fat pointer type in... X-Git-Tag: releases/gcc-4.6.0~1941 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e2d3a4bba91302346202e83b4c79a4d2c68d856c;p=thirdparty%2Fgcc.git 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) : 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 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a42758d52bd3..4972d30517d7 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,11 @@ +2010-12-13 Eric Botcazou + + * gcc-interface/decl.c (gnat_to_gnu_entity) : + 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 * gcc-interface/trans.c (can_be_lower_p): New predicate. diff --git a/gcc/ada/gcc-interface/decl.c b/gcc/ada/gcc-interface/decl.c index 8980bb2bf8b5..b45033f303fa 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 fa2d09697264..d0449571d85b 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