[PATCH] Fix Fortran ICE due to realloc_string_callback bug (PR fortran/71204)
Jerry DeLisle
jvdelisle@charter.net
Fri May 20 20:16:00 GMT 2016
On 05/20/2016 04:36 AM, Jakub Jelinek wrote:
> Hi!
>
> We ICE at -O0 while compiling the testcase below, because we don't reset
> two vars that are reset in all other places in frontend-passes.c when
> starting to process an unrelated statement. Without this,
> we can emit some statement into a preexisting block that can be elsewhere
> in the current procedure or as in the testcase in completely different
> procedure.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk/6/5?
Yes, OK, thanks for patch!
Jerry
>
> 2016-05-20 Jakub Jelinek <jakub@redhat.com>
>
> PR fortran/71204
> * frontend-passes.c (realloc_string_callback): Clear inserted_block
> and changed_statement before calling create_var.
>
> * gfortran.dg/pr71204.f90: New test.
>
> --- gcc/fortran/frontend-passes.c.jj 2016-05-11 15:16:18.000000000 +0200
> +++ gcc/fortran/frontend-passes.c 2016-05-20 10:44:31.699542384 +0200
> @@ -174,8 +174,10 @@ realloc_string_callback (gfc_code **c, i
>
> if (!gfc_check_dependency (expr1, expr2, true))
> return 0;
> -
> +
> current_code = c;
> + inserted_block = NULL;
> + changed_statement = NULL;
> n = create_var (expr2, "trim");
> co->expr2 = n;
> return 0;
> --- gcc/testsuite/gfortran.dg/pr71204.f90.jj 2016-05-20 10:45:40.738608941 +0200
> +++ gcc/testsuite/gfortran.dg/pr71204.f90 2016-05-20 10:46:25.873998687 +0200
> @@ -0,0 +1,17 @@
> +! PR fortran/71204
> +! { dg-do compile }
> +! { dg-options "-O0" }
> +
> +module pr71204
> + character(10), allocatable :: z(:)
> +end module
> +
> +subroutine s1
> + use pr71204
> + z(2) = z(1)
> +end
> +
> +subroutine s2
> + use pr71204
> + z(2) = z(1)
> +end
>
> Jakub
>
More information about the Gcc-patches
mailing list