This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[patch, fortran] Fix the rest of PR 71203
- From: Thomas König <tk at tkoenig dot net>
- To: "fortran at gcc dot gnu dot org" <fortran at gcc dot gnu dot org>, gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Sat, 9 Mar 2019 13:44:30 +0100
- Subject: [patch, fortran] Fix the rest of PR 71203
Hello world,
the attached patch fixes the rest of PR 71203 (i.e. the non-character
parts). I have checked in gdb that the shape set with this patch
does indeed not create a memory leak.
Regression-tested. OK for trunk?
(This makes three patches that are currently awaiting review, the
other two are https://gcc.gnu.org/ml/fortran/2019-03/msg00022.html
and https://gcc.gnu.org/ml/fortran/2019-02/msg00241.html. I'd
appreciate somebody looking at these, I think I am close to the
limit of concurrent patches in my tree :-)
Regards
Thomas
2019-03-09 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/71203
* decl.c (add_init_expr_to_sym): Add shape if init has none. Add
assert that it has to be an EXPR_ARRAY in this case.
2019-03-09 Thomas König <tkoenig@gcc.gnu.org>
PR fortran/71203
* gfortran.dg/array_simplify_3.f90: New test case.
Index: decl.c
===================================================================
--- decl.c (Revision 269443)
+++ decl.c (Arbeitskopie)
@@ -1983,8 +1983,14 @@ add_init_expr_to_sym (const char *name, gfc_expr *
return false;
}
- /* Shape should be present, we get an initialization expression. */
- gcc_assert (init->shape);
+ /* The shape may be NULL for EXPR_ARRAY, set it. */
+ if (init->shape == NULL)
+ {
+ gcc_assert (init->expr_type == EXPR_ARRAY);
+ init->shape = gfc_get_shape (1);
+ if (!gfc_array_size (init, &init->shape[0]))
+ gfc_internal_error ("gfc_array_size failed");
+ }
for (dim = 0; dim < sym->as->rank; ++dim)
{
! { dg-do run }
! PR 71203 - this used to ICE
program p
integer :: i
integer, parameter :: x(2) = 0
integer, parameter :: y(*) = [(x(i:i), i=1,2)]
if (size(y,1) /= 2) stop 1
if (any(y /= 0)) stop 2
end