diff mbox series

[fortran] Fix PR 83540

Message ID 098a8857-fcef-9506-baa4-c3645e7397ba@netcologne.de
State New
Headers show
Series [fortran] Fix PR 83540 | expand

Commit Message

Thomas Koenig Dec. 26, 2017, 12:12 p.m. UTC
Hello world,

this rather self-explanatory patch makes sure we don't get an error
using reallocation on assignment for inlining matmul when
we don't have reallocation on assignment.

Regression-tested. OK for trunk?

Regards

	Thomas

2017-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/83540
         * frontend-passes.c (create_var): If an array to be created
         has unknown size and -fno-realloc-lhs is in effect,
         return NULL.

2017-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>

         PR fortran/83540
         * gfortran.dg/inline_matmul_20.f90: New test.

Comments

Paul Richard Thomas Dec. 26, 2017, 4:19 p.m. UTC | #1
OK - thanks for the patch.

Paul


On 26 December 2017 at 12:12, Thomas Koenig <tkoenig@netcologne.de> wrote:
> Hello world,
>
> this rather self-explanatory patch makes sure we don't get an error
> using reallocation on assignment for inlining matmul when
> we don't have reallocation on assignment.
>
> Regression-tested. OK for trunk?
>
> Regards
>
>         Thomas
>
> 2017-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>
>
>         PR fortran/83540
>         * frontend-passes.c (create_var): If an array to be created
>         has unknown size and -fno-realloc-lhs is in effect,
>         return NULL.
>
> 2017-12-25  Thomas Koenig  <tkoenig@gcc.gnu.org>
>
>         PR fortran/83540
>         * gfortran.dg/inline_matmul_20.f90: New test.
diff mbox series

Patch

Index: frontend-passes.c
===================================================================
--- frontend-passes.c	(Revision 255788)
+++ frontend-passes.c	(Arbeitskopie)
@@ -720,6 +720,11 @@  create_var (gfc_expr * e, const char *vname)
   if (e->expr_type == EXPR_CONSTANT || is_fe_temp (e))
     return gfc_copy_expr (e);
 
+  /* Creation of an array of unknown size requires realloc on assignment.
+     If that is not possible, just return NULL.  */
+  if (flag_realloc_lhs == 0 && e->rank > 0 && e->shape == NULL)
+    return NULL;
+
   ns = insert_block ();
 
   if (vname)