This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

971114: Sparc EH globbers registers


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]