Package: gcc-3.2
Version: 1:3.2.1-0pre3
Severity: important
Tags: upstream


-- System Information:
Debian Release: testing/unstable
Architecture: i386
Kernel: Linux rusalka 2.4.20-pre4 #1 SMP Tue Sep 3 22:12:35 MDT 2002 i686
Locale: LANG=C, LC_CTYPE=C

Versions of packages gcc-3.2 depends on:
ii  binutils                   2.13.90.0.4-1 The GNU assembler, linker and bina
ii  cpp-3.2                    1:3.2.1-0pre3 The GNU C preprocessor.
ii  gcc-3.2-base               1:3.2.1-0pre3 The GNU Compiler Collection (base 
ii  libc6                      2.2.5-14.3    GNU C Library: Shared libraries an
ii  libgcc1                    1:3.2.1-0pre3 GCC support library.

-- no debconf information

the following simple code produces a segfault when compiled using gcc
3.2 using the folloing command line:

gcc -march=k6-3 -O3 -ffast-math -funroll-loops -fomit-frame-pointer
-fexpensive-optimizations -fstrict-aliasing -pipe -Wall -Werror
-fno-common -o foo foo.c

---8<---

void *array[4];

int
main ()
{
        int i;

        for (i = 0; i < sizeof (array) / sizeof (array[0]); i++)
                array[i] = 0;
        return 0;
}

---8<---

The following is the resulting asm (-S instead of -o foo). Lines
begining with "*" are annotations. Non-useful lines are omitted.

        movl    $array+4, %eax
        movl    $array, %edx
        cmpl    $array+13, %eax
        movl    $array+12, %ecx
        jb      .L10
        .loc 1 9 0
        movl    $0, (%edx)
        .loc 1 8 0
        addl    $4, %edx
        cmpl    %ecx, %edx
        ja      .L9
.L10:
        subl    $array-1, %ecx
        shrl    $4, %ecx

*                   ^^^   set to 0

        .p2align 5,,7
.L28:
        .loc 1 9 0
        movl    $0, (%edx)
        movl    $0, 4(%edx)
        movl    $0, 8(%edx)
        movl    $0, 12(%edx)
        .loc 1 8 0
        addl    $16, %edx
        loop    .L28

*       ^^^ %ecx is 0 for the first pass and thus this loop becomes
*       effectively infinite causing %edx to overflow the array.

.L9:
        .loc 1 10 0
        ret
[snip]
        .string "GNU C 3.2.1 20020924 (Debian prerelease)"



Reply via email to