This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
971114: Sparc EH globbers registers
- To: egcs-bugs at cygnus dot com
- Subject: 971114: Sparc EH globbers registers
- From: Teemu Torma <tot at Trema dot COM>
- Date: Fri, 21 Nov 1997 19:42:36 +0100
- Organization: Trema Laboratories SARL
In the following example, in Sparc/Solaris 2.5.1, if compiled with -O,
it does not print "i = 0" as one would expect. It seems that the
register that holds i will get globbered. In this case I always
get "i = 1". Without optimization, it seems to work ok.
I noticed this bug while testing omniORB with gcc.
$ c++ -v -O e.cc
Reading specs from /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/specs
gcc version egcs-2.90.17 971114 (gcc2-970802 experimental)
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -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__EXCEPTIONS -D__OPTIMIZE__ -D__GCC_NEW_VARARGS__ -Acpu(sparc) -Amachine(sparc) e.cc /var/tmp/cca004n8.ii
GNU CPP version egcs-2.90.17 971114 (gcc2-970802 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/usr/gnu/include/g++
/usr/local/include
/usr/gnu/sparc-sun-solaris2.5.1/include
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/include
/usr/include
End of search list.
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/cc1plus /var/tmp/cca004n8.ii -quiet -dumpbase e.cc -O -version -o /var/tmp/cca004n8.s
GNU C++ version egcs-2.90.17 971114 (gcc2-970802 experimental) (sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.90.17 971114 (gcc2-970802 experimental).
/usr/gnu/sparc-sun-solaris2.5.1/bin/as -V -Qy -s -o /var/tmp/cca004n81.o /var/tmp/cca004n8.s
GNU assembler version 970915 (sparc-sun-solaris2.5.1), using BFD version 970915
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/ld -V -Y P,/usr/ccs/lib:/usr/lib -Qy /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/crt1.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/crti.o /usr/ccs/lib/values-Xa.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/crtbegin.o -L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17 -R/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17 -L/usr/gnu/sparc-sun-solaris2.5.1/lib -R/usr/gnu/sparc-sun-solaris2.5.1/lib -L/usr/ccs/bin -R/usr/ccs/bin -L/usr/ccs/lib -R/usr/ccs/lib -L/usr/gnu/lib -R/usr/gnu/lib /var/tmp/cca004n81.o -lstdc++ -lm -lgcc -lc -lgcc /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/crtend.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.17/crtn.o
GNU ld version 2.8.2 (with BFD 970915)
Supported emulations:
elf32_sparc
$ ./a.out
i = 1
$
---------------------------------------------------------------------------
#include <iostream.h>
int bar ()
{
throw 100;
}
main ()
{
int i = 0;
try
{
i = bar ();
}
catch (...)
{
}
cout << "i = " << i << endl;
}
---------------------------------------------------------------------------
Teemu