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

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #2 from kargl at gcc dot gnu.org ---
This seems to do the trick.  Patch is against svn r280157.

Note 1. The error message in gfortran.dg/pr88025.f90 needs to
be adjusted.

Note 2. This causes a regression with gfortran.dg/mapping_1.f90,
because the reference to the contained pure function tricky_helper
occurs before tricky_helper has been parsed.  Thus, gfortran assumes
that tricky_helper is an impure function, which is no allowed here.
Oh well.  The regression can be avoided by re-ordering the functions
in the test case.

Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c  (revision 280157)
+++ gcc/fortran/decl.c  (working copy)
@@ -1056,6 +1072,11 @@ char_len_param_value (gfc_expr **expr, bool *deferred)

   if (!gfc_expr_check_typed (*expr, gfc_current_ns, false))
     return MATCH_ERROR;
+
+  /* If gfortran gets an EXPR_OP, try to reduce it.  This catches things
+     like CHARACTER(([1])).   */
+  if ((*expr)->expr_type == EXPR_OP)
+    gfc_reduce_init_expr (*expr);

   if ((*expr)->expr_type == EXPR_FUNCTION)
     {

Reply via email to