https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93483

--- Comment #3 from anlauf at gcc dot gnu.org ---
The case

program p
  print *, +[ real :: +(1) ]
end

is solved by e.g.

diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c
index c4c1041afdf..b2fbeddeb49 100644
--- a/gcc/fortran/arith.c
+++ b/gcc/fortran/arith.c
@@ -1268,6 +1268,11 @@ reduce_unary (arith (*eval) (gfc_expr *, gfc_expr **),
gfc_expr *op,
   head = gfc_constructor_copy (op->value.constructor);
   for (c = gfc_constructor_first (head); c; c = gfc_constructor_next (c))
     {
+      if (c->expr->expr_type == EXPR_FUNCTION
+         && c->expr->value.function.isym
+         && c->expr->value.function.isym->elemental)
+       gfc_simplify_expr (c->expr, 1);
+
       rc = reduce_unary (eval, c->expr, &r);

       if (rc != ARITH_OK)


Another case of missed simplification?

Reply via email to