https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118580
Bug ID: 118580 Summary: Incorrect complex (sp) - real (dp) operation within maxval Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: federico.perini at gmail dot com Target Milestone: --- 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