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

--- Comment #5 from Steve Kargl <sgk at troutmask dot apl.washington.edu> ---
On Thu, Mar 01, 2018 at 10:31:42PM +0000, kargl at gcc dot gnu.org wrote:
> (In reply to Harald Anlauf from comment #3)
> > Maybe some kind of "shortcut" (similar to Steve's fix for pr83998) can
> > solve this.  Not sure where this would fit in.
> 
> I have a patch for at least the ANY and ALL problem. :-)
> 

Well, the simply obvious patch

 gfc_expr *
 gfc_simplify_any (gfc_expr *mask, gfc_expr *dim)
 {
+  /* Check for zero sized array. sgk */
+  if (mask->rank > 0 && mask->shape == NULL)
+     return gfc_get_logical_expr (mask->ts.kind, &mask->where, false);
+
   return simplify_transformation (mask, dim, NULL, false, gfc_or);
 }

cause a bunch of regressions.  One is given by

! { dg-do run }
! PR 71795 - wrong result when putting an array constructor
! instide an iterator.
     program test
     implicit none
     integer :: i,n
     logical, dimension(1) :: ra
     logical :: rs
     integer, allocatable :: a(:)
     allocate ( a(1) )
     n = 1
     a = 2
     rs = any ( (/ (any(a(i).eq.(/1,2,3/)) ,i=1,n) /) )
     if (.not. rs) call abort
   end program test

which is odd.  The code never goes through the
if () statement as mask->shape is always non-null.
So, the code should compile as-if I never made
a change to gfc_simplify_any.

:(

Reply via email to