------- Comment #9 from rob1weld at aol dot com 2009-02-01 00:49 ------- It can be compiled with ONE earlier version of gcc but not another - so this is a regression.
Works on 4.0.2: # /opt/csw/gcc4/bin/gcc -v Reading specs from /opt/csw/gcc4/lib/gcc/i386-pc-solaris2.8/4.0.2/specs Target: i386-pc-solaris2.8 Configured with: ../sources/gcc-4.0.2/configure --prefix=/opt/csw/gcc4 --with-local-prefix=/opt/csw --with-gnu-as --with-as=/opt/csw/bin/gas --without-gnu-ld --with-ld=/usr/ccs/bin/ld --enable-threads=posix --enable-shared --enable-multilib --enable-nls --with-included-gettext --with-libiconv-prefix=/opt/csw --with-x --enable-java-awt=xlib --with-system-zlib --enable-languages=c,c++,f95,java,objc,ada Thread model: posix gcc version 4.0.2 # /opt/csw/gcc4/bin/gcc -I./../arch/386 -I. -Wall -DHAVE_CONFIG_H -DFORCE_LL -DFORCE_REG -DDEFAULTPATH='".:/usr/local/lib/gforth/site-forth:/usr/local/share/gforth/site-forth:/usr/local/lib/gforth/0.7.0:/usr/local/share/gforth/0.7.0"' -O3 -fno-gcse -fomit-frame-pointer -o engine-fast-ll-reg.o -c ./engine.c # ls -lrtA | tail -1 -rw-r--r-- 1 root root 45848 Jan 31 16:44 engine-fast-ll-reg.o Broken on 3.4.5: # /opt/csw/gcc3/bin/gcc -v Reading specs from /opt/csw/gcc3/lib/gcc/i386-pc-solaris2.8/3.4.5/specs Configured with: ../sources/gcc-3.4.5/configure --prefix=/opt/csw/gcc3 --with-local-prefix=/opt/csw --with-gnu-as --with-as=/opt/csw/bin/gas --without-gnu-ld --with-ld=/usr/ccs/bin/ld --enable-threads=posix --enable-shared --enable-multilib --enable-nls --with-included-gettext --with-libiconv-prefix=/opt/csw --with-x --enable-java-awt=xlib --enable-languages=all Thread model: posix gcc version 3.4.5 # /opt/csw/gcc3/bin/gcc -I./../arch/386 -I. -Wall -DHAVE_CONFIG_H -DFORCE_LL -DFORCE_REG -DDEFAULTPATH='".:/usr/local/lib/gforth/site-forth:/usr/local/share/gforth/site-forth:/usr/local/lib/gforth/0.7.0:/usr/local/share/gforth/0.7.0"' -O3 -fno-gcse -fomit-frame-pointer -o engine-fast-ll-reg.o -c ./engine.c ./engine.c: In function `gforth_engine': ./engine.c:460: error: unable to find a register to spill in class `DIREG' ./engine.c:460: error: this is the insn: (insn:HI 10882 25685 10883 883 (parallel [ (set (reg:SI 2 cx [969]) (unspec:SI [ (mem:BLK (reg/v/f:SI 1 dx [orig:964 c_addr2 ] [964]) [0 A8]) (reg:QI 0 ax [973]) (const_int 1 [0x1]) (reg:SI 2 cx [972]) ] 20)) (use (reg:SI 19 dirflag)) (clobber (reg/f:SI 1917 [ c_addr2 ])) (clobber (reg:CC 17 flags)) ]) 456 {*strlenqi_1} (insn_list 10878 (insn_list 10880 (insn_list 10881 (nil)))) (expr_list:REG_DEAD (reg:SI 19 dirflag) (expr_list:REG_DEAD (reg:SI 2 cx [972]) (expr_list:REG_DEAD (reg:QI 0 ax [973]) (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_UNUSED (reg/f:SI 1917 [ c_addr2 ]) (nil))))))) ./engine.c:460: confused by earlier errors, bailing out Rob -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35135