https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67316

            Bug ID: 67316
           Summary: Address local variable returned as 0x0
           Product: gcc
           Version: 5.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: llandwerlin at gmail dot com
  Target Milestone: ---

Playing with a project using Hans Boehm's GC (http://www.hboehm.info/gc/), and
getting a crash with gcc 5.2.1,  I nailed down the difference to the following
program :

----------------------------------

#include <stdio.h>

typedef char* ptr_t;
typedef unsigned long word;

ptr_t GC_approx_sp1(void)
{
    volatile word dummy;
    dummy = 42;
    return((ptr_t)&dummy);
}

ptr_t GC_approx_sp2(void)
{
    volatile word dummy;
    dummy = 42;
    ptr_t ret = (ptr_t)&dummy;
    return ret;
}

int
main(int argc, char* argv[]) {
  printf("sp1=%p, sp2=%p\n", GC_approx_sp1(), GC_approx_sp2());
  return 0;
}

----------------------------------

GCC 4.8/4.9 will print something like this : sp1=0x7ffc8fa4ce98,
sp2=0x7ffc8fa4ce90
GCC 5.2.1 will print this                  : sp1=(nil), sp2=0x7ffcb650d550

I may be missing something obvious here, but if this is a programming error, I
find it weird this thing never got caught before.

For info the function from hboehm's GC is GC_approx_sp().

Thanks!

Reply via email to