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

Thomas Koenig <tkoenig at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |FIXED

--- Comment #13 from Thomas Koenig <tkoenig at gcc dot gnu.org> ---
This one is fixed.

The only (minor) thing is that, if the function result for SUM or
PRODUCT has rank >= 1, we fall back to the library version if
the MASK is passed as an absent optional argument.

Why?  Well, the scalarized loop took its bounds from the
last argument pushed to the scalarizer, which was the mask.
If that mask was absent, it used uninitialized variables.

For the one-dimensional code, I was able to handle this
by reversing the order with this part of the patch:

-      gfc_add_ss_to_loop (&loop, arrayss);
+
+      /* We add the mask first because the number of iterations is
+        taken from the last ss, and this breaks if an absent
+        optional argument is used for mask.  */
+
       if (maskexpr && maskexpr->rank > 0)
        gfc_add_ss_to_loop (&loop, maskss);
+      gfc_add_ss_to_loop (&loop, arrayss);

For the multi-dimensional case, I tried to do so, but failed.

OTOH, the code is correct, and I doubt that generating inlined
code for this corner case is actually worth putting in the time.

So, closing.

Reply via email to