The attached patch was built and tested on x86_64-*-freebsd.
OK to commit?
The patch prevents an ICE in a BLOCK construct that uses
a DATA statement and default initialization. The problem
was that the derived typed was declared in the host and
was not in the BLOCK's symtree. The fix looks for the
derived type through host associate.
Just remembered Mikael pre-approved patch.
2015-09-30 Steven G. Kargl <[email protected]>
PR fortran/67616
* primary.c (gfc_match_structure_constructor): Use a possibly
host-associated symtree to prevent ICE.
2015-09-30 Steven G. Kargl <[email protected]>
PR fortran/67616
* gfortran.dg/pr67616.f90: New test.
--
Steve
Index: fortran/primary.c
===================================================================
--- fortran/primary.c (revision 228306)
+++ fortran/primary.c (working copy)
@@ -2697,7 +2697,7 @@ gfc_match_structure_constructor (gfc_sym
gfc_expr *e;
gfc_symtree *symtree;
- gfc_get_sym_tree (sym->name, NULL, &symtree, false); /* Can't fail */
+ gfc_get_ha_sym_tree (sym->name, &symtree);
e = gfc_get_expr ();
e->symtree = symtree;
Index: testsuite/gfortran.dg/pr67616.f90
===================================================================
--- testsuite/gfortran.dg/pr67616.f90 (revision 0)
+++ testsuite/gfortran.dg/pr67616.f90 (working copy)
@@ -0,0 +1,13 @@
+! { dg-do compile }
+! PR fortran/67616
+! Original code contributed by Gerhard Steinmetz
+program p
+ type t
+ end type
+ type(t) :: y
+ data y /t()/
+ block
+ type(t) :: x
+ data x /t()/ ! Prior to patch, this would ICE.
+ end block
+end