Fortran: allocate()d memory is uninitialized
authorJan Kratochvil <jan.kratochvil@redhat.com>
Wed, 4 Nov 2015 14:52:41 +0000 (15:52 +0100)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Wed, 4 Nov 2015 14:52:41 +0000 (15:52 +0100)
commit6f2f1a3a706e56b3fddd7ab1fc9a313343c85d4a
treeaccb4a63416e3b445ccb19bd6c63e6e6604e51b7
parent6df55226405d626059f81bec3078a70db41dec9f
Fortran: allocate()d memory is uninitialized

  allocate (vla1 (5))         ! vla1-not-allocated
  l = allocated(vla1)         ! vla1-allocated     <------------------

Expecting: ^(510-data-evaluate-expression vla1[^M
]+)?(510\^done,value="\(0, 0, 0, 0, 0\)"[^M
]+[(]gdb[)] ^M
[ ]*)
510-data-evaluate-expression vla1^M
510^done,value="(1.82987403e-09, 7.8472714e-44, 1.82987403e-09, 7.8472714e-44, 2.67929926e+20)"^M
(gdb) ^M
FAIL: gdb.mi/mi-vla-fortran.exp: evaluate allocated vla

gcc-4.9.2-6.fc21.x86_64

I think some older gfortran did initialize allocated memory but that is an
unspecified behavior.  I haven't found any initialization mentioned
in Fortran 90 standard (draft) and it is also clearly stated here:
        https://software.intel.com/en-us/forums/intel-fortran-compiler-for-linux-and-mac-os-x/topic/268786
        Initialization to 0 of allocated arrays (of integers) is an
        implementation issue. i.e. do not rely on it.

Joel Brobecker wrote:
I am wondering if it might be better to just relax instead the regexp to allow
any number rather than just remove the test altogether. The test allows us to
verify that, as soon as we're past the "allocate" call, we no longer say "not
allocated".

gdb/testsuite/ChangeLog
2015-11-03  Jan Kratochvil  <jan.kratochvil@redhat.com>
    Joel Brobecker  <brobecker@adacore.com>

* gdb.mi/mi-vla-fortran.exp (evaluate allocated vla): Permit any data.
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.mi/mi-vla-fortran.exp