Uninitialized variable detection in Fortran

Daniel Feenberg via Valgrind-users <[email protected]> Thu, 24 Oct 2024 10:33:36 -0400 (EDT)
Newsgroups gmane.comp.debugging.valgrind
Message-ID <[email protected]>
I am a bit inexperienced with Valgrind which reports an uninitialized 
variable in my 34,000 line program. But the message comes from a branch 
deep in libgfortran. After some experimentation, I created the following 
example program which demonstrates my difficulty:

cat -n test.for
      1        program test
      2        integer i,j
      3        j=i+1
      4        write(*,*) j
      5        stop
      6        end

I compile and run with:

    gfortran -g stuff.for
    valgrind --track-origins=yes ./a.out

and get a great deal of output pointing to line 4. But the first use of 
the uninitialized value is in line 3. In this case the error is obvious, 
but IRL I haven't been able to identify the source. I thought 
"track-origins" would do that. Is there an option or other way to ask 
Valgrind to be a little stricter, and flag the use of an unidentified 
variable in an assignment, not just in a condition?

Here is the output with --exit-on-first-error=yes, otherwise there is an 
avalanch of text:

==4095841== Memcheck, a memory error detector
==4095841== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==4095841== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==4095841== Command: ./a.out
==4095841==
==4095841== Conditional jump or move depends on uninitialised value(s)
==4095841==    at 0x4AD2B8E: ??? (in /usr/lib64/libgfortran.so.5.0.0)
==4095841==    by 0x4AD6C6B: ??? (in /usr/lib64/libgfortran.so.5.0.0)
==4095841==    by 0x4AD7C66: ??? (in /usr/lib64/libgfortran.so.5.0.0)
==4095841==    by 0x4011DC: MAIN__ (test.for:4)
==4095841==    by 0x401233: main (test.for:6)
==4095841==  Uninitialised value was created by a stack allocation
==4095841==    at 0x401176: MAIN__ (test.for:1)
==4095841==
==4095841==
==4095841== Exit program on first error (--exit-on-first-error=yes)

Thank you and any help much appreciated.

Daniel Feenberg