Bug 51207

Summary: gcc-2.96-85 fails with AREG error
Product: [Retired] Red Hat Linux Reporter: Need Real Name <kbieltz>
Component: gccAssignee: Jakub Jelinek <jakub>
Status: CLOSED WONTFIX QA Contact: David Lawrence <dkl>
Severity: high Docs Contact:
Priority: medium    
Version: 7.1   
Target Milestone: ---   
Target Release: ---   
Hardware: i386   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2001-08-08 14:23:21 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Need Real Name 2001-08-08 14:23:17 UTC
From Bugzilla Helper:
User-Agent: Mozilla/4.76 [en] (Windows NT 5.0; U)

Description of problem:
The same C++ code that compiles with kgcc and gcc-2.91-66 fails when
I attempt to compile it with gcc-2.96-85.  Here is the log of the make:
/usr/bin/gcc -c -Wall -O2 -I. --schedule-insns -DINTEL -DUNIX -DLINUX -DSVR4 Array.cpp -fPIC -DPIC -o obj/Array.o
/usr/bin/gcc -c -Wall -O2 -I. --schedule-insns -DINTEL -DUNIX -DLINUX -DSVR4 Cache.cpp -fPIC -DPIC -o obj/Cache.o
Cache.cpp: In method `Bool Cache::Remove (MntrObject *, int)':
Cache.cpp:128: Unable to find a register to spill in class `AREG'.
Cache.cpp:128: confused by earlier errors, bailing out
make[4]: *** [obj/Cache.o] Error 1
make[3]: *** [releaseso] Error 2
make[2]: *** [releaseso] Error 2
make[1]: *** [releaseso] Error 2
make: *** [releaseso] Error 2

I need to compile this C++ library with gcc-2.96-85 so I can link it into
other executables compiled with gcc-2.96-85.  I can't compile
working executables for RH 7.1 until I get this fixed.

A work-around or fix would be appreciated.

How reproducible:
Always

Steps to Reproduce:
1.make > m.log 2>&1
2.
3.
	

Actual Results:  /usr/bin/gcc -c -Wall -O2 -I. --schedule-insns -DINTEL -DUNIX -DLINUX -DSVR4 Array.cpp -fPIC -DPIC -o obj/Array.o
/usr/bin/gcc -c -Wall -O2 -I. --schedule-insns -DINTEL -DUNIX -DLINUX -DSVR4 Cache.cpp -fPIC -DPIC -o obj/Cache.o
Cache.cpp: In method `Bool Cache::Remove (MntrObject *, int)':
Cache.cpp:128: Unable to find a register to spill in class `AREG'.
Cache.cpp:128: confused by earlier errors, bailing out
make[4]: *** [obj/Cache.o] Error 1
make[3]: *** [releaseso] Error 2
make[2]: *** [releaseso] Error 2
make[1]: *** [releaseso] Error 2
make: *** [releaseso] Error 2

Expected Results:  Cache.o should have compiled without errors.

Additional info:

Comment 1 Jakub Jelinek 2001-08-08 14:33:06 UTC
-fschedule-insns is not to be used on register starved machines like i386.
It generally creates much worse code on those, plus results in reload errors
too.
-fschedule-insns2 is more appropriate on i386, but -O2 already enables it
by default.

Comment 2 Need Real Name 2001-08-08 15:07:45 UTC
Thanks!! for the information regarding the -fschedule-insns option.
I removed it and my C++ library compiled just fine.

Thank you.
Kathy Bieltz