This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/38883] [4.4 Regression] ICE for MVBITS with derived type argument that has run-time subscripts
- From: "burnus at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 18 Jan 2009 19:16:15 -0000
- Subject: [Bug fortran/38883] [4.4 Regression] ICE for MVBITS with derived type argument that has run-time subscripts
- References: <bug-38883-15620@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #4 from burnus at gcc dot gnu dot org 2009-01-18 19:16 -------
Some more data: Using
printf("Node: tmp = %s\n", tree_code_name[TREE_CODE (tmp)]);
printf("Node: desc = %s\n",
tree_code_name[TREE_CODE (gfc_get_element_type (TREE_TYPE (desc)))]);
gcc_assert (tmp == gfc_get_element_type (TREE_TYPE (desc)));
one sees:
Node: tmp = record_type
Node: desc = integer_type
desc gets its type via "gfc_get_array_type_bounds()" in
gfc_trans_create_temp_array. And then
gfc_get_element_type (TREE_TYPE (desc))
And "tmp" via the following:
if (fsym->attr.intent == INTENT_INOUT)
initial = parmse.expr;
else
initial = NULL_TREE;
in gfc_conv_elemental_dependencies which then in
gfc_trans_allocate_array_storage gets accessed as:
tmp = TREE_TYPE (initial); /* Pointer to descriptor. */
gcc_assert (TREE_CODE (tmp) == POINTER_TYPE);
tmp = TREE_TYPE (tmp); /* The descriptor itself. */
tmp = gfc_get_element_type (tmp);
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38883