[PR fortran/89077, patch] - ICE using * as len specifier for character parameter
Harald Anlauf
anlauf@gmx.de
Sun Feb 3 21:04:00 GMT 2019
The attached patch fixes an ICE-on-valid that probably goes back to
rev.128130. Apparently the patch applied back then did not check
this code path which resulted in a NULL pointer dereference. This
is remedied by the new testcase base on comment #0 in this PR.
The PR mentions another wrong-code issue to be addressed separately.
OK for trunk? And shall this fix be backported?
Thanks,
Harald
2019-02-03 Harald Anlauf <anlauf@gmx.de>
PR fortran/89077
* decl.c (add_init_expr_to_sym): Copy length of string initializer
to declared symbol.
2019-02-03 Harald Anlauf <anlauf@gmx.de>
PR fortran/89077
* gfortran.dg/pr89077.f90: New test.
-------------- next part --------------
Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c (revision 268502)
+++ gcc/fortran/decl.c (working copy)
@@ -1921,7 +1921,7 @@
}
else if (init->ts.u.cl && init->ts.u.cl->length)
sym->ts.u.cl->length =
- gfc_copy_expr (sym->value->ts.u.cl->length);
+ gfc_copy_expr (init->ts.u.cl->length);
}
}
/* Update initializer character length according symbol. */
-------------- next part --------------
Index: gcc/testsuite/gfortran.dg/pr89077.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr89077.f90 (nonexistent)
+++ gcc/testsuite/gfortran.dg/pr89077.f90 (working copy)
@@ -0,0 +1,11 @@
+! { dg-do run }
+!
+! PR fortran/89077 - ICE using * as len specifier for character parameter
+
+program test
+ implicit none
+ integer :: i
+ character(*), parameter :: s = 'abcdef'
+ character(*), parameter :: t = transfer ([(s(i:i), i=1,len(s))], s)
+ if (len (t) /= len (s) .or. t /= s) stop 1
+end
More information about the Gcc-patches
mailing list