[gnu.gcc.bug] 2 bugs in gcc1.34/1.35

lawley@mullauna.cs.mu.oz.au (michael lawley) (05/23/89)

First the Encore specific bug (see below for machine/OS details).

When compiled with gcc 1.34 or 1.35 _and_ optimisation, the following
code:

main()
{
    int a=1;

    if(a) a++;
    if ( 2 == a) a++;
}

gives the assembler output:

	.file	"s22.c"
gcc_compiled.:
.text
	.align 16
.globl _main
_main:
	enter [],0
	movl $2,f0
	exit []
	ret 0

which doesn't assemble due to the floating point register! Why a float
register should be there I have no idea. Here is the output from gcc1.35:

gcc -v -O gcc-bug.c
gcc version 1.35
 /nip/usr/lib/gcc-cpp -v -undef -D__GNUC__ -Dns32000 -Dn16 -Dns16000 -Dns32332 -Dunix -D__ns32000__ -D__n16__ -D__ns16000__ -D__ns32332__ -D__unix__ -D__OPTIMIZE__ gcc-bug.c /tmp/cc014955.cpp
GNU CPP version 1.35
 /nip/usr/lib/gcc-cc1 /tmp/cc014955.cpp -quiet -dumpbase gcc-bug.c -O -version -o /tmp/cc014955.s
GNU C version 1.35 (32000, Encore syntax) compiled by GNU C version 1.35.
 as -j -o gcc-bug.o /tmp/cc014955.s
Assembler: gcc-bug.c
	aline 8	: illegal operand

The configuration is as follows:

lrwxr-xr-x  1 lawley   staff       15 May 17 15:11 md@ -> config/ns32k.md
lrwxr-xr-x  1 lawley   staff       18 May 17 15:11 tm.h@ -> config/tm-encore.h

Machine is an Encore Multimax with 12 NS32032 processors running
UMAX 4.2 Release R3.3.0 (bug was also there for R3.1.0)

Also, if the second "a++" in the above code is changed to "return 2"
(giving "if ( a == 2 ) return 2;") then the assembler output is:

gcc -o /dev/tty -O -S gcc-bug2.c
	.file	"gcc-bug2.c"
gcc_compiled.:
.text
	.align 16
.globl _main
_main:
	enter [],0
	movl $2,f0
	cmpl f0,f0
	bne .L3
	movqd $2,r0
.L3:
	exit []
	ret 0

Comparing a register with itself ! (Still with float register bug.)

cheers, mike.

	   /----------------------------------------------------\
           | ACSnet: lawley@munnari.oz.au                       |
	   | UUCP:   {uunet,ukc,ubc-cs,mcvax}!munnari.oz!lawley |
	   | ARPA:   lawley%munnari.oz@uunet.uu.net             |
	   \----------------------------------------------------/