970917 EH problem in sparc with -O
Teemu Torma
tot@trema.com
Thu Sep 18 02:56:00 GMT 1997
If the following program is compiled with optimization turned on,
throwing an exception will cause an infinite loop to exceptions.
The compiler has Jason's `--pc' patch installed.
It works just fine in 970910 with or without sjlj exceptions.
Without -O:
$ gcc eh.cc
$ ./a.out
2: Throwing
2: Got level 2
1: Got level 2
0: Got level 2
With -O:
$ gcc -O eh.cc
$ ./a.out
2: Throwing
2: Got level 2
2: Got level 2
2: Got level 2
2: Got level 2
... and so on.
eh.cc ----------------------------------------------------------------------
#include <stdio.h>
#include <exception>
static void
eh_terminate ()
{
printf ("CALLING TERMINATE\n");
exit (0);
}
void
eh_test (int level)
{
try
{
if (level < 2)
eh_test (level + 1);
else
{
printf ("%d: Throwing\n", level);
throw (level);
}
}
catch (int &x)
{
printf ("%d: Got level %d\n",
level, x);
if (level > 0)
throw;
}
}
main ()
{
set_terminate (&eh_terminate);
eh_test (0);
}
----------------------------------------------------------------------
$ gcc -v -O eh.cc
Reading specs from /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/specs
gcc version egcs-2.90.08 970917 (gcc2-970802 experimental)
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -D__GNUC_MINOR__=90 -Dsun -Dsparc -Dunix -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun__ -D__sparc__ -D__unix__ -D__svr4__ -D__SVR4 -D__GCC_NEW_VARARGS__ -D__sun -D__sparc -D__unix -Asystem(unix) -Asystem(svr4) -Acpu(sparc) -Amachine(sparc) -D__EXCEPTIONS -D__OPTIMIZE__ eh.cc /var/tmp/cca003pe.ii
GNU CPP version egcs-2.90.08 970917 (gcc2-970802 experimental) (sparc)
#include "..." search starts here:
#include <...> search starts here:
/usr/gnu/lib/g++-include
/usr/local/include
/usr/gnu/sparc-sun-solaris2.5.1/include
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/include
/usr/include
End of search list.
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/cc1plus /var/tmp/cca003pe.ii -quiet -dumpbase eh.cc -O -version -o /var/tmp/cca003pe.s
GNU C++ version egcs-2.90.08 970917 (gcc2-970802 experimental) (sparc-sun-solaris2.5.1) compiled by GNU C version egcs-2.90.08 970917 (gcc2-970802 experimental).
/usr/ccs/bin/as -V -Qy -s -o /var/tmp/cca003pe1.o /var/tmp/cca003pe.s
/usr/ccs/bin/as: SC4.2 dev 30 Nov 1995
/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/ld -V -Y P,/usr/ccs/lib:/usr/lib -Qy /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/crt1.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/crti.o /usr/ccs/lib/values-Xa.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/crtbegin.o -L/usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08 -L/usr/ccs/bin -L/usr/ccs/lib -L/usr/gnu/lib /var/tmp/cca003pe1.o -lgcc -lc -lgcc /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/crtend.o /usr/gnu/lib/gcc-lib/sparc-sun-solaris2.5.1/egcs-2.90.08/crtn.o
ld: Software Generation Utilities (SGU) SunOS/ELF (LK-2.0 (S/I) - versioning)
----------------------------------------------------------------------
Teemu
More information about the Gcc
mailing list