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]$