[Bug middle-end/56301] [4.7 Regression] wrong code with the fix for PR53844

rguenth at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Feb 18 12:48:00 GMT 2013


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

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> 2013-02-18 12:48:13 UTC ---
I don't see how this is a bug.

  job_64 = job_new (class_39, "");
  # DEBUG job => job_64
  if (job_64 == 0B)
    goto <bb 43>;
  else
    goto <bb 44>;

<bb 43>:
  # DEBUG __fmt => "BAD: wrong value for %s, got unexpected %p\n\tat %s:%d
(%s).\n"
  __printf_chk (1, "BAD: wrong value for %s, got unexpected %p\n\tat %s:%d
(%s).\n", "job", 0B, "tests/test_job.c", 111, &__FUNCTION__);
  abort ();

<bb 44>:
  D.9269_65 = job_64->pid;
  *D.9269_65 = pid_49;

that was the last use of the memory pointed to by job_64 (job_new is marked as
malloc).  In fact, job_64->pid is uninitialized!  To quote the documentation
of the malloc attribute:

@item malloc
@cindex @code{malloc} attribute
The @code{malloc} attribute is used to tell the compiler that a function
may be treated as if any non-@code{NULL} pointer it returns cannot
alias any other pointer valid when the function returns and that the memory
has undefined content.
This will often improve optimization.
Standard functions with this property include @code{malloc} and
@code{calloc}.  @code{realloc}-like functions do not have this
property as the memory pointed to does not have undefined content.

it appears that the returned memory does not have undefined contents.



More information about the Gcc-bugs mailing list