This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] fortran/67616 -- Fix ICE in BLOCK with a DATA statement
- From: Steve Kargl <sgk at troutmask dot apl dot washington dot edu>
- To: fortran at gcc dot gnu dot org, gcc-patches at gcc dot gnu dot org
- Date: Wed, 30 Sep 2015 17:03:15 -0700
- Subject: [PATCH] fortran/67616 -- Fix ICE in BLOCK with a DATA statement
- Authentication-results: sourceware.org; auth=none
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 <kargl@gcc.gnu.org>
PR fortran/67616
* primary.c (gfc_match_structure_constructor): Use a possibly
host-associated symtree to prevent ICE.
2015-09-30 Steven G. Kargl <kargl@gcc.gnu.org>
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