This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/34640] ICE when assigning item of a derived-component to a pointer
- From: "pault at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 3 Jan 2008 17:58:06 -0000
- Subject: [Bug fortran/34640] ICE when assigning item of a derived-component to a pointer
- References: <bug-34640-15407@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #5 from pault at gcc dot gnu dot org 2008-01-03 17:58 -------
I'm taking a look at how it might be done.
This allows compilation to proceed:
Index: gcc/fortran/trans-decl.c
===================================================================
*** gcc/fortran/trans-decl.c (revision 131237)
--- gcc/fortran/trans-decl.c (working copy)
*************** gfc_get_symbol_decl (gfc_symbol * sym)
*** 951,956 ****
--- 951,970 ----
sym->backend_decl = decl;
}
+ if (sym->attr.subref_array_pointer)
+ {
+ tree span;
+ GFC_DECL_SUBREF_ARRAY_P (sym->backend_decl) = 1;
+ span = build_decl (VAR_DECL, create_tmp_var_name ("span"),
+ gfc_array_index_type);
+ gfc_allocate_lang_decl (sym->backend_decl);
+ gfc_finish_var_decl (span, sym);
+ TREE_STATIC (span) = 1;
+ DECL_INITIAL (span) = build_int_cst (NULL_TREE, 0);
+
+ GFC_DECL_SPAN (sym->backend_decl) = span;
+ }
+
TREE_USED (sym->backend_decl) = 1;
if (sym->attr.assign && GFC_DECL_ASSIGN (sym->backend_decl) == 0)
{
but the span is not passed back to the actual argument, as this demonstrates:
MODULE test
IMPLICIT NONE
TYPE :: my_type
INTEGER :: value = 99
INTEGER :: spacer = 199
END TYPE
CONTAINS
SUBROUTINE get_values(values, d)
INTEGER,POINTER :: values(:)
TYPE(my_type),POINTER :: d(:)
values => d(:)%value
print *, "in get_values ", values
END SUBROUTINE
END MODULE
use test
TYPE(my_type),POINTER :: d(:)
INTEGER,POINTER :: values(:)
allocate (d(2))
call get_values (values, d)
print *, "in MAIN ", values
deallocate (d)
end
I'll have to figure out how this can be done. No doubt 'span' will have to be
added to the parent scope and the assignment performed on function entry and
return. Hmmm!! Better still would be to copy in and copy out.
Back to PR34431 and friends - I'll do this next.
Paul
--
pault at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|ASSIGNED |WAITING
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34640