optimization/3921: wrong output with -02 on sparc-sun-solaris2.6) compiled by GNU C version 3.0. /usr/ccs/bin/as -V -using __asm wrong output with -O2 on sparc-sun-solaris2.6

bfkelly@nsa.gov bfkelly@nsa.gov
Fri Aug 3 07:16:00 GMT 2001


>Number:         3921
>Category:       optimization
>Synopsis:       wrong output with -02 on sparc-sun-solaris2.6)         compiled by GNU C version 3.0.  /usr/ccs/bin/as -V -using __asm wrong output with -O2 on sparc-sun-solaris2.6
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Fri Aug 03 07:16:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     bfkelly@nsa.gov
>Release:        gcc-3.0
>Organization:
>Environment:
Reading specs from /projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-so
laris2.6/3.0/specs
Configured with: ../gcc-core-3.0/configure --prefix=/projects/r51/gnu/gcc-core-3
.0/SunOS
Thread model: posix
gcc version 3.0
 /projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/cpp0 
-lang-c -v -iprefix /projects/r51/gnu/bin-SunOS/../lib/gcc-lib/sparc-sun-solaris
2.6/3.0/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=0 -Dsparc -Dsun -
Dunix -D__svr4__ -D__SVR4 -D__sparc__ -D__sun__ -D__unix__ -D__svr4__ -D__SVR4 -
D__sparc -D__sun -D__unix -Asystem=unix -Asystem=svr4 -D__OPTIMIZE__ -D__STDC_HO
STED__=1 -D__GCC_NEW_VARARGS__ -Acpu=sparc -Amachine=sparc foo.c foo.i
GNU CPP version 3.0 (cpplib) (sparc)
ignoring nonexistent directory "/projects/r51/gnu/lib/gcc-lib/sparc-sun-solaris2
.6/3.0/include"
ignoring nonexistent directory "/projects/r51/gnu/lib/gcc-lib/sparc-sun-solaris2
.6/3.0/../../../../sparc-sun-solaris2.6/include"
ignoring nonexistent directory "/projects/r51/gnu/gcc-core-3.0/SunOS/sparc-sun-s
olaris2.6/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/inclu
de
 /usr/include
End of search list.
 /projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/cc1 -
fpreprocessed foo.i -quiet -dumpbase foo.c -O2 -version -o foo.s
GNU CPP version 3.0 (cpplib) (sparc)
GNU C version 3.0 (sparc-sun-solaris2.6)
        compiled by GNU C version 3.0.
 /usr/ccs/bin/as -V -Qy -s -o foo.o foo.s
/usr/ccs/bin/as: WorkShop Compilers 4.X dev 18 Sep 1996
 /projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/colle
ct2 -V -Y P,/usr/ccs/lib:/usr/lib -Qy -o foo /projects/r51/gnu/gcc-core-3.0/SunO
S/lib/gcc-lib/sparc-sun-solaris2.6/3.0/crt1.o /projects/r51/gnu/gcc-core-3.0/Sun
OS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/crti.o /usr/ccs/lib/values-Xa.o /project
s/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/crtbegin.o -L/
projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0 -L/usr/
ccs/bin -L/usr/ccs/lib -L/projects/r51/gnu/gcc-core-3.0/SunOS/lib/gcc-lib/sparc-
sun-solaris2.6/3.0/../../.. foo.o -lgcc -lc -lgcc /projects/r51/gnu/gcc-core-3.0
/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/crtend.o /projects/r51/gnu/gcc-core-
3.0/SunOS/lib/gcc-lib/sparc-sun-solaris2.6/3.0/crtn.o
ld: Software Generation Utilities - Solaris/ELF (3.0)

>Description:
/* The following code demonstrates a bug in the  */
/* optimizer of gcc-3.0 on a SunOS machine.      */
/*                                               */
/* % gcc -O1 -o foo foo.c; foo                   */
/* z[0]= 0  r[0]= 0                              */
/* z[1]= 1  r[1]= 1                              */
/*       ^                                       */
/*                                               */
/* % gcc -O2 -o foo foo.c; foo                   */
/* z[0]= 0  r[0]= 0                              */
/* z[1]= 0  r[1]= 1                              */
/*       ^                                       */

#include <stdio.h>

#define bar(a, b, c, z, r)\
    __asm__(\
        "ld [%3],%%g4; addcc %%g4,%0,%%g4; st %%g4,[%3];\
        ld [%3+4],%%g4; addxcc %%g4,%1,%%g4; st %%g4,[%3+4];\
        addx %2,%%g0,%%g4; st %%g4,[%4+4]"\
        ::  "rJ" ((int) (a)),\
          "rJ"   ((int) (b)),\
          "rJ"   ((int) (c)),\
          "r"    ((int *) (z)),\
          "r"    ((int *) (r))\
        : "%g4", "cc"\
    )


void foo(z,r)
int   *z;
int   *r;
{
    int  a, b, c;
    int i;
 
    for (i=0; i < 2; i++) {
        if (i == 0) {
          a = 0;
        }
        if (i == 1) {
          a = 0;
        }
        c = 1;
        b = r[1];
        bar(a, b, c, z, r);
    }
}


main()
{
    int z[2];
    int r[2];
  
    z[0] = z[1] = 0;
    r[0] = r[1] = 0;

    foo(z, r);

    printf("z[0]= %d  r[0]= %d\n", z[0], r[0]);
    printf("z[1]= %d  r[1]= %d\n", z[1], r[1]);
}

>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:



More information about the Gcc-prs mailing list