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

           Summary: [x32] Incorrect array access
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: hjl.to...@gmail.com


[hjl@gnu-6 build]$ cat test/prXXX.c 
static int heap[2*(256 +1+29)+1];
static int heap_len;
static int heap_max;
void 
__attribute__ ((noinline))
foo (int elems)
{
  int n, m;
  int max_code = -1;
  int node = elems;
  heap_len = 0, heap_max = (2*(256 +1+29)+1);
  for (n = 0; n < elems; n++)
    heap[++heap_len] = max_code = n;
  do {
    n = heap[1];
    heap[1] = heap[heap_len--];
    m = heap[1];
    heap[--heap_max] = n;
    heap[--heap_max] = m;
  } while (heap_len >= 2);
}

int
main ()
{
  foo (286);
  return 0;
}
[hjl@gnu-6 build]$ make
mkdir -p x32/exe
/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/ -mx32 -fPIC -fno-exceptions
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/arch-x32/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel/arch-x32
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel/common
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libm/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libm/include/i387 
-Ulinux -D__ANDROID__ -DANDROID -DUSE_SSSE3 -DUSE_SSE2 -DPIC -g -O2  -o
x32/exe/prXXX.static -nostdlib -Wl,-Bstatic -Wl,-z,nocombreloc
x32/lib/crtbegin_static.o x32/obj/prXXX.o  -Wl,--start-group x32/lib/libc.a
/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/libgcc.a -Wl,--end-group
x32/lib/crtend_android.o
mkdir -p x32/exe
/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/xgcc
-B/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/ -mx32 -fPIC -fno-exceptions
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/arch-x32/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel/arch-x32
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libc/kernel/common
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libm/include
-I/export/gnu/import/git/kernel.org/x32/libc/build/../bionic/libm/include/i387 
-Ulinux -D__ANDROID__ -DANDROID -DUSE_SSSE3 -DUSE_SSE2 -DPIC -g -O2  -o
x32/exe/prXXX.dynamic -nostdlib -Wl,-z,nocopyreloc  -Wl,-z,nocombreloc
-Wl,-dynamic-linker
/export/gnu/import/git/kernel.org/x32/libc/build/x32/lib/ld.so
x32/lib/crtbegin_dynamic.o x32/obj/prXXX.o  x32/lib/libc.so x32/lib/libdl.so
/export/build/gnu/gcc-x32/build-x86_64-linux/gcc/libgcc.a
x32/lib/crtend_android.o
export LD_LIBRARY_PATH=x32/lib; \
for f in x32/exe/init-mixed.static x32/exe/init-mixed.dynamic
x32/exe/hello.static x32/exe/hello.dynamic x32/exe/prXXX.static
x32/exe/prXXX.dynamic; do \
  ./$f; \
done
OK
OK
Hello world
Hello world
/bin/sh: line 1: 22295 Segmentation fault      ./$f
/bin/sh: line 1: 22296 Segmentation fault      ./$f
make: *** [all] Error 139
[hjl@gnu-6 build]$

Reply via email to