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