------- 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