on this system > uname -a Linux pcihopt1 2.6.4-52-smp #1 SMP Wed Apr 7 01:58:54 UTC 2004 x86_64 x86_64 x86_64 GNU/Linux
with the latest 4.0 (branch) of gfortran (but also with the 4.0.1 release): GNU Fortran 95 (GCC 4.0.3 20051230 (prerelease)) I'm getting the following error with valgrind for this valid program: > cat test.f90 IMPLICIT NONE integer, parameter :: ndf=6 real(KIND=8), allocatable, dimension(:) :: eigval,work ALLOCATE(eigval(ndf)) ALLOCATE(work(ndf)) eigval=1.0_8 CALL set_hes_eig(ndf,eigval,work) END SUBROUTINE set_hes_eig(ndf,eigval,work) IMPLICIT NONE INTEGER, INTENT(IN) :: ndf REAL(KIND=8), INTENT(INOUT) :: eigval(ndf), work(ndf) REAL(KIND=8), PARAMETER :: one = 1.0_8 INTEGER :: indf LOGICAL :: neg DO indf = 1, ndf IF( eigval(indf) < 0.0_8 )THEN work(indf) = - one ELSE work(indf) = one END IF END DO END SUBROUTINE set_hes_eig > gcc_40_branch/build/bin/gfortran -g -O2 -ffast-math test.f90 > valgrind --tool=memcheck ./a.out ==30181== Memcheck, a memory error detector. ==30181== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al. ==30181== Using LibVEX rev 1367, a library for dynamic binary translation. ==30181== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP. ==30181== Using valgrind-3.0.1, a dynamic binary instrumentation framework. ==30181== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al. ==30181== For more details, rerun with: -v ==30181== ==30181== Invalid read of size 8 ==30181== at 0x400862: set_hes_eig_ (test.f90:18) ==30181== by 0x4007FD: MAIN__ (test.f90:7) ==30181== by 0x40089D: main (fmain.c:18) ==30181== Address 0x12329498 is 0 bytes after a block of size 72 alloc'd ==30181== at 0x11B1C166: malloc (vg_replace_malloc.c:149) ==30181== by 0x11C2B0B8: _gfortrani_get_mem (memory.c:99) ==30181== by 0x11C2B0EC: malloc_with_header (memory.c:125) ==30181== by 0x11C2B220: allocate_size (memory.c:228) ==30181== by 0x40075E: MAIN__ (test.f90:4) ==30181== by 0x40089D: main (fmain.c:18) The error goes away using '-O2' or '-O1 -ffast-math' On an intel chip I get this error as well using '-march=pentium4 -mfpmath=sse -O2 -ffast-math' I haven't seen any wrong results in the output of this code, but I guess this is worth looking into anyway, as this won't be fortran specific. -- Summary: wrong code at -O2 -ffast-math on opteron ? Product: gcc Version: 4.0.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: jv244 at cam dot ac dot uk http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25607