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

kargls at comcast dot net changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargls at comcast dot net

--- Comment #2 from kargls at comcast dot net ---
(In reply to federico from comment #0)
> Sample program: 
> 
> ```
> program complex_eye
>   implicit none
>   integer, parameter :: dp = kind(0.d0)
>   integer, parameter :: sp = kind(0.0)
>   integer, parameter :: k = 2
>   integer :: i,j
>   complex(sp), dimension(k,k) :: A, B
>   real(dp) :: eye(k, k), mx, mxB
> 
>   do j = 1,k; do i=1, k
>     eye(i,j) = merge(1,0,i==j)
>       A(i,j) = merge(1,0,i==j)
>   enddo
> 
>   B   = A - eye
>   mx  = maxval(abs(A-eye))
>   mxB = maxval(abs(B))
> 
>   if (mx>1.0e-6) then 
>      write(*, *) "maxval(abs(A - eye)) = ", mx ! Should be 0, it is 1.0
>      write(*, *) "maxval(abs(B))       = ", mxB
>      stop 1
>   else
>      stop 0
>   endif    
> 
> end program complex_eye
> ```
> 
> when `maxval` is run on a temporary expression, it returns a wrong value
> (often 1.0, but sometimes junk values). when the operation is saved in
> variable B first, it returns the correct value.
> 
> In Compiler explorer, see https://godbolt.org/z/E6dWcEc9s : 
> - fails on all versions of gfortran from 4.9.4 to 15.0
> - fails with any optimization levels, also -O0
> 
> We found this issue after an update to the Fortran Standard Library, but the
> issue seems not related to the library itself. 
> 
> Thank you,
> Federico

% gfcx -o z a.f90 && ./z
a.f90:27:3:

   27 | end program complex_eye
      |   1
Error: Expecting END DO statement at (1)
f951: Error: Unexpected end of file in 'a.f90'


Seems to be complicated what to generate an identity matrix

   do j = 1,k; do i=1, k
     eye(i,j) = merge(1,0,i==j)
       A(i,j) = merge(1,0,i==j)
   enddo

   eye = 0
   do j = 1, k
      eye(j,j) = 1
   end do
   a = eye

Reply via email to