diff mbox series

[fortran] PR94246 - [9/10 Regression] valgrind error for ./gfortran.dg/bessel_5.f90 since r9-1566-g87c789f1c0b2df41

Message ID CAGkQGiLnFVpyDmsUe6kLFgY9+Ka-S=XKa61gFfaUy3bAjXv_Ug@mail.gmail.com
State New
Headers show
Series [fortran] PR94246 - [9/10 Regression] valgrind error for ./gfortran.dg/bessel_5.f90 since r9-1566-g87c789f1c0b2df41 | expand

Commit Message

Li, Pan2 via Gcc-patches March 26, 2020, 11:20 a.m. UTC
This turned out to be relatively trivial, following a fair amount of
head scratching:-(

Regtests on FC31/x64_86 - OK for both branches?

Paul

2020-03-26  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/94246
    * expr.c (scalarize_intrinsic_call): Remove the error checking.
    Make a copy of the expression to be simplified and only replace
    the original if the simplification succeeds.

2020-03-26  Paul Thomas  <pault@gcc.gnu.org>

    PR fortran/94246
    * gfortran.dg/bessel_5_redux.f90 : New test.

Comments

Tobias Burnus March 26, 2020, 11:37 a.m. UTC | #1
Dear Paul,

OK – thanks for the patch.

Tobias

PS: I assume that the spacing issue in the patch
is due to the mail program.

On 3/26/20 12:20 PM, Paul Richard Thomas via Fortran wrote:

> This turned out to be relatively trivial, following a fair amount of
> head scratching:-(
>
> Regtests on FC31/x64_86 - OK for both branches?
>
> Paul
>
> 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
>
>      PR fortran/94246
>      * expr.c (scalarize_intrinsic_call): Remove the error checking.
>      Make a copy of the expression to be simplified and only replace
>      the original if the simplification succeeds.
>
> 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
>
>      PR fortran/94246
>      * gfortran.dg/bessel_5_redux.f90 : New test.
>
> diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
> index 79e00b4112a..1106341df91 100644
> --- a/gcc/fortran/expr.c
> +++ b/gcc/fortran/expr.c
> @@ -2296,9 +2296,8 @@ scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
>     gfc_constructor_base ctor;
>     gfc_constructor *args[5] = {};  /* Avoid uninitialized warnings.  */
>     gfc_constructor *ci, *new_ctor;
> -  gfc_expr *expr, *old;
> +  gfc_expr *expr, *old, *p;
>     int n, i, rank[5], array_arg;
> -  int errors = 0;
>
>     if (e == NULL)
>       return false;
> @@ -2366,8 +2365,6 @@ scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
>         n++;
>       }
>
> -  gfc_get_errors (NULL, &errors);
> -
>     /* Using the array argument as the master, step through the array
>        calling the function for each element and advancing the array
>        constructors together.  */
> @@ -2401,8 +2398,12 @@ scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
>         /* Simplify the function calls.  If the simplification fails, the
>        error will be flagged up down-stream or the library will deal
>        with it.  */
> -      if (errors == 0)
> -    gfc_simplify_expr (new_ctor->expr, 0);
> +      p = gfc_copy_expr (new_ctor->expr);
> +
> +      if (!gfc_simplify_expr (p, init_flag))
> +    gfc_free_expr (p);
> +      else
> +    gfc_replace_expr (new_ctor->expr, p);
>
>         for (i = 0; i < n; i++)
>       if (args[i])
-----------------
Mentor Graphics (Deutschland) GmbH, Arnulfstraße 201, 80634 München / Germany
Registergericht München HRB 106955, Geschäftsführer: Thomas Heurung, Alexander Walter
Li, Pan2 via Gcc-patches March 29, 2020, 12:25 p.m. UTC | #2
On Thu, Mar 26, 2020 at 4:38 AM Tobias Burnus <tobias@codesourcery.com> wrote:
>
> Dear Paul,
>
> OK – thanks for the patch.
>
> Tobias
>
> PS: I assume that the spacing issue in the patch
> is due to the mail program.
>
> On 3/26/20 12:20 PM, Paul Richard Thomas via Fortran wrote:
>
> > This turned out to be relatively trivial, following a fair amount of
> > head scratching:-(
> >
> > Regtests on FC31/x64_86 - OK for both branches?
> >
> > Paul
> >
> > 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
> >
> >      PR fortran/94246
> >      * expr.c (scalarize_intrinsic_call): Remove the error checking.
> >      Make a copy of the expression to be simplified and only replace
> >      the original if the simplification succeeds.
> >
> > 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
> >
> >      PR fortran/94246
> >      * gfortran.dg/bessel_5_redux.f90 : New test.
> >

This caused:

FAIL: gfortran.dg/pr93365.f90   -O0  (internal compiler error)
FAIL: gfortran.dg/pr93365.f90   -O0  (test for excess errors)
FAIL: gfortran.dg/pr93365.f90   -O1  (internal compiler error)
FAIL: gfortran.dg/pr93365.f90   -O1  (test for excess errors)
FAIL: gfortran.dg/pr93365.f90   -O2  (internal compiler error)
FAIL: gfortran.dg/pr93365.f90   -O2  (test for excess errors)
FAIL: gfortran.dg/pr93365.f90   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (internal
compiler error)
FAIL: gfortran.dg/pr93365.f90   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
excess errors)
FAIL: gfortran.dg/pr93365.f90   -O3 -g  (internal compiler error)
FAIL: gfortran.dg/pr93365.f90   -O3 -g  (test for excess errors)
FAIL: gfortran.dg/pr93365.f90   -Os  (internal compiler error)
FAIL: gfortran.dg/pr93365.f90   -Os  (test for excess errors)
FAIL: gfortran.dg/pr93600_1.f90   -O  (internal compiler error)
FAIL: gfortran.dg/pr93600_1.f90   -O   (test for errors, line 6)
FAIL: gfortran.dg/pr93600_1.f90   -O   (test for errors, line 7)
FAIL: gfortran.dg/pr93600_1.f90   -O  (test for excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -O0  (internal compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -O0  (test for excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -O1  (internal compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -O1  (test for excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -O2  (internal compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -O2  (test for excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (internal
compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -O3 -fomit-frame-pointer
-funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -O3 -g  (internal compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -O3 -g  (test for excess errors)
FAIL: gfortran.dg/pr93600_2.f90   -Os  (internal compiler error)
FAIL: gfortran.dg/pr93600_2.f90   -Os  (test for excess errors)
Li, Pan2 via Gcc-patches March 29, 2020, 12:29 p.m. UTC | #3
On Sun, Mar 29, 2020 at 5:25 AM H.J. Lu <hjl.tools@gmail.com> wrote:
>
> On Thu, Mar 26, 2020 at 4:38 AM Tobias Burnus <tobias@codesourcery.com> wrote:
> >
> > Dear Paul,
> >
> > OK – thanks for the patch.
> >
> > Tobias
> >
> > PS: I assume that the spacing issue in the patch
> > is due to the mail program.
> >
> > On 3/26/20 12:20 PM, Paul Richard Thomas via Fortran wrote:
> >
> > > This turned out to be relatively trivial, following a fair amount of
> > > head scratching:-(
> > >
> > > Regtests on FC31/x64_86 - OK for both branches?
> > >
> > > Paul
> > >
> > > 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
> > >
> > >      PR fortran/94246
> > >      * expr.c (scalarize_intrinsic_call): Remove the error checking.
> > >      Make a copy of the expression to be simplified and only replace
> > >      the original if the simplification succeeds.
> > >
> > > 2020-03-26  Paul Thomas  <pault@gcc.gnu.org>
> > >
> > >      PR fortran/94246
> > >      * gfortran.dg/bessel_5_redux.f90 : New test.
> > >
>
> This caused:
>
> FAIL: gfortran.dg/pr93365.f90   -O0  (internal compiler error)
> FAIL: gfortran.dg/pr93365.f90   -O0  (test for excess errors)
> FAIL: gfortran.dg/pr93365.f90   -O1  (internal compiler error)
> FAIL: gfortran.dg/pr93365.f90   -O1  (test for excess errors)
> FAIL: gfortran.dg/pr93365.f90   -O2  (internal compiler error)
> FAIL: gfortran.dg/pr93365.f90   -O2  (test for excess errors)
> FAIL: gfortran.dg/pr93365.f90   -O3 -fomit-frame-pointer
> -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal
> compiler error)
> FAIL: gfortran.dg/pr93365.f90   -O3 -fomit-frame-pointer
> -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
> excess errors)
> FAIL: gfortran.dg/pr93365.f90   -O3 -g  (internal compiler error)
> FAIL: gfortran.dg/pr93365.f90   -O3 -g  (test for excess errors)
> FAIL: gfortran.dg/pr93365.f90   -Os  (internal compiler error)
> FAIL: gfortran.dg/pr93365.f90   -Os  (test for excess errors)
> FAIL: gfortran.dg/pr93600_1.f90   -O  (internal compiler error)
> FAIL: gfortran.dg/pr93600_1.f90   -O   (test for errors, line 6)
> FAIL: gfortran.dg/pr93600_1.f90   -O   (test for errors, line 7)
> FAIL: gfortran.dg/pr93600_1.f90   -O  (test for excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -O0  (internal compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -O0  (test for excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -O1  (internal compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -O1  (test for excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -O2  (internal compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -O2  (test for excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -O3 -fomit-frame-pointer
> -funroll-loops -fpeel-loops -ftracer -finline-functions  (internal
> compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -O3 -fomit-frame-pointer
> -funroll-loops -fpeel-loops -ftracer -finline-functions  (test for
> excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -O3 -g  (internal compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -O3 -g  (test for excess errors)
> FAIL: gfortran.dg/pr93600_2.f90   -Os  (internal compiler error)
> FAIL: gfortran.dg/pr93600_2.f90   -Os  (test for excess errors)
>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94386
diff mbox series

Patch

diff --git a/gcc/fortran/expr.c b/gcc/fortran/expr.c
index 79e00b4112a..1106341df91 100644
--- a/gcc/fortran/expr.c
+++ b/gcc/fortran/expr.c
@@ -2296,9 +2296,8 @@  scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
   gfc_constructor_base ctor;
   gfc_constructor *args[5] = {};  /* Avoid uninitialized warnings.  */
   gfc_constructor *ci, *new_ctor;
-  gfc_expr *expr, *old;
+  gfc_expr *expr, *old, *p;
   int n, i, rank[5], array_arg;
-  int errors = 0;

   if (e == NULL)
     return false;
@@ -2366,8 +2365,6 @@  scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
       n++;
     }

-  gfc_get_errors (NULL, &errors);
-
   /* Using the array argument as the master, step through the array
      calling the function for each element and advancing the array
      constructors together.  */
@@ -2401,8 +2398,12 @@  scalarize_intrinsic_call (gfc_expr *e, bool init_flag)
       /* Simplify the function calls.  If the simplification fails, the
      error will be flagged up down-stream or the library will deal
      with it.  */
-      if (errors == 0)
-    gfc_simplify_expr (new_ctor->expr, 0);
+      p = gfc_copy_expr (new_ctor->expr);
+
+      if (!gfc_simplify_expr (p, init_flag))
+    gfc_free_expr (p);
+      else
+    gfc_replace_expr (new_ctor->expr, p);

       for (i = 0; i < n; i++)
     if (args[i])