[Bug fortran/53521] [4.5/4.6/4.7/4.8 Regression] Zero-byte "memory leak" with zero-sized array constructor (valgrind warning)

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed May 30 14:37:00 GMT 2012


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53521

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-05-30 13:49:51 UTC ---
That is clearly a bug in the Fortran FE.
      D.1888 = (integer(kind=4)[0] * restrict) __builtin_realloc ((void *)
atmp.0.data, D.1887);
      if (D.1888 == 0B && D.1887 != 0)
        {
          _gfortran_os_error (&"Allocation would exceed memory limit"[1]{lb: 1
sz: 1});
        }
      if (D.1887 == 0)
        {
          D.1888 = 0B;
        }
means that D.1888 isn't freed.  POSIX says that realloc (x, 0) acts as free
only if x is not NULL, realloc (NULL, 0) acts as malloc (0), which can either
return NULL, or a unique pointer that needs to be freed.



More information about the Gcc-bugs mailing list