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

Paul Thomas <pault at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Last reconfirmed|                            |2023-06-21
                 CC|                            |pault at gcc dot gnu.org
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

--- Comment #3 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to Damian Rouson from comment #1)
> Here's a shorter reproducer:
> 
> % cat reshape-array-constructor.f90 
>   type foo_t
>     integer, allocatable :: bar(:)
>   end type
> 
>   type(foo_t) foo(2,1)
>   integer :: i, j,  n(2,2,1) = reshape([-1,-1,1,1], [2,2,1])
> 
>   foo = reshape([([(foo_t(merge(0, 1, n(:,i,j) > 0)), i=1,2)], j=1,1)],
> [2,1])
>   print *, merge(0, 1, n(:,1,1) > 0), foo(1,1)%bar
>   print *, merge(0, 1, n(:,2,1) > 0), foo(2,1)%bar
> end
> % gfortran reshape-array-constructor.f90 
> % ./a.out
>            1           1  -358465392       24440
>            0           0  -358465392       24440
> % gfortran --version
> GNU Fortran (Homebrew GCC 13.1.0) 13.1.0
> 
> Another workaround in the above example is to make n a constant array via
> 
> integer, parameter :: n(*,*,*) = reshape([-1,-1,1,1], [2,2,1])

I have played with this a bit. It's a complete mess. Breaking out the inner
array constructor to a temporary produces the same result.

I have put it on my list of TODOs. First finish associate, gather up the last
of the select type bugs and attack PDTs.

Cheers

Paul

Reply via email to