]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/91553 (ICE in gfc_real2complex, at fortran/arith.c:2208)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 14 Sep 2019 17:05:17 +0000 (17:05 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 14 Sep 2019 17:05:17 +0000 (17:05 +0000)
2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91553
* simplify.c (gfc_convert_constant):  During conversion check if the
constant is enclosed in parenthesis, and simplify expression.

2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91553
* gfortran.dg/pr91553.f90: New test.

From-SVN: r275716

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

index d07ad3025c7e0a398818d137f7c1cd9336ef4142..19a3e0c68179d96a942ac94c8127a3f6b46d3da9 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91553
+       * simplify.c (gfc_convert_constant):  During conversion check if the
+       constant is enclosed in parenthesis, and simplify expression.
+
 2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/91566
index 30924c1f049dc292c935710466cee274e4fd114b..f8c9a42cdc7f2461fbd8c2fef8887a120a729143 100644 (file)
@@ -8526,6 +8526,12 @@ 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)
+               {
+                 gfc_simplify_expr (c->expr, 1);
+                 tmp = f (c->expr, kind);
+               }
              else
                tmp = f (c->expr, kind);
            }
index 38a599068e93b0d7669cb6a33d85e12342f212d0..0df33c2333f0946a0230e1aa1caeef8298cf89a7 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91553
+       * gfortran.dg/pr91553.f90: New test.
+
 2019-09-14  Steven G. Kargl  <kargl@gcc.gnu.org>
 
        PR fortran/91566
diff --git a/gcc/testsuite/gfortran.dg/pr91553.f90 b/gcc/testsuite/gfortran.dg/pr91553.f90
new file mode 100644 (file)
index 0000000..2d0b018
--- /dev/null
@@ -0,0 +1,8 @@
+! { dg-do run }
+! Code contributed by Gerhard Steinmetz
+program p
+   complex z(1)
+   z = (1.0, 2.0) * [real :: (3.0 + 4.0)]
+   if (real(z(1)) /= 7.) stop 1
+   if (aimag(z(1)) /= 14.) stop 2
+end