Hi Paul,

shouldn't this be done in iresolve.cc to make other parts of gfortran benefit
from learning, that the sym is allocatable?

--- a/gcc/fortran/trans-intrinsic.cc
+++ b/gcc/fortran/trans-intrinsic.cc
@@ -3883,6 +3883,13 @@ gfc_conv_intrinsic_funcall (gfc_se * se, gfc_expr *
expr) append_args->quick_push (null_pointer_node);
        }
     }
+  /* Non-character scalar reduce returns a pointer to a result of size set by
+     the element size of 'array'. Setting 'sym' allocatable ensures that the
+     result is deallocated at the appropriate time.  */
+  else if (expr->value.function.isym->id == GFC_ISYM_REDUCE
+      && expr->rank == 0 && expr->ts.type != BT_CHARACTER)
+    sym->attr.allocatable = 1;
+

   gfc_conv_procedure_call (se, sym, expr->value.function.actual, expr,
                          append_args);

--- a/libgfortran/intrinsics/reduce.c
+++ b/libgfortran/intrinsics/reduce.c
@@ -83,8 +83,8 @@ reduce (parray *ret,
   if (dim_present)
     {
       if ((*dim < 1) || (*dim > (GFC_INTEGER_4)array_rank))
-       runtime_error ("DIM in REDUCE intrinsic is less than 0 or greater than
"
-                      "the rank of ARRAY");
+       runtime_error ("Mismatch between DIM in and the rank of ARRAY in the "

... DIM and the rank ... ???

+                      "REDUCE intrinsic (%d/%d)", (int)*dim, array_rank);
       dimen = (index_type) *dim;
     }
   else

...

       if (masked && (ext != GFC_DESCRIPTOR_EXTENT (mask, i)))
-       runtime_error ("shape mismatch between ARRAY and MASK in REDUCE "
-                      "intrinsic");
+       {
+         int mext = (int)GFC_DESCRIPTOR_EXTENT (mask, i);
+         runtime_error ("shape mismatch between ARRAY and MASK in REDUCE "
+                        "intrinsic (%d/%d)", (int)ext, mext);

size_t mext = ...
runtime_error ("... intrinsic (%zd/%d)", ext, mext);

%zd is for size_t and other size related variable-output. It might be more
precise. Just an idea.


Please check your Changelog for style. When I am not mistaken, then a . has to
be followed by two spaces. Or did this change? I like to use git gcc-verify on
my commit message. That points out some easy to spot oversights.

Besides those minor nits: Looks good to me. Ok to merge, when reports have
verified.

Thanks for the patch,
        Andre
--
Andre Vehreschild * Email: vehre ad gmx dot de

Reply via email to