re PR fortran/91784 (ICE in gfc_real2complex, at fortran/arith.c:2208)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 2 Oct 2019 17:17:55 +0000 (17:17 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Wed, 2 Oct 2019 17:17:55 +0000 (17:17 +0000)
2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91784
* simplify.c (gfc_convert_constant): Simplify expression if the
expres ion type is EXPR_OP.

2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91784
* gfortran.dg/pr91784.f90: New test.

From-SVN: r276474

gcc/fortran/ChangeLog
gcc/fortran/simplify.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr91784.f90 [new file with mode: 0644]

index bf8702f..ea1177f 100644 (file)
@@ -1,5 +1,11 @@
 2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/91784
+       * simplify.c (gfc_convert_constant): Simplify expression if the
+       expression type is EXPR_OP.
+
+2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        PR fortran/91785
        * primary.c (gfc_match_varspec): Ensure an inquiry parameter has
        it locus set.
index 3d2fc0d..32ebcc0 100644 (file)
@@ -8508,10 +8508,10 @@ gfc_convert_constant (gfc_expr *e, bt type, int kind)
            {
              if (c->expr->expr_type == EXPR_ARRAY)
                tmp = gfc_convert_constant (c->expr, type, kind);
-             else if (c->expr->expr_type == EXPR_OP
-                      && c->expr->value.op.op == INTRINSIC_PARENTHESES)
+             else if (c->expr->expr_type == EXPR_OP)
                {
-                 gfc_simplify_expr (c->expr, 1);
+                 if (!gfc_simplify_expr (c->expr, 1))
+                   return &gfc_bad_expr;
                  tmp = f (c->expr, kind);
                }
              else
index cdd99ef..0bc13fc 100644 (file)
@@ -1,5 +1,10 @@
 2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>
 
+       PR fortran/91784
+       * gfortran.dg/pr91784.f90: New test.
+
+2019-10-02  Steven G. Kargl  <kargl@gcc.gnu.org>
+
        PR fortran/91785
        * gfortran.dg/pr91785.f90: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/pr91784.f90 b/gcc/testsuite/gfortran.dg/pr91784.f90
new file mode 100644 (file)
index 0000000..25280e0
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do run }
+! PR fortran/91784
+! Code originally contributed by Gerhard Steinmetz
+program p
+   complex :: x(1)
+   x = (1.0, 2.0) * [real :: -(3.0 + 4.0)]
+   if (int(real(x(1))) /= -7) stop 1
+   if (int(aimag(x(1))) /= -14) stop 2
+end