This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project.


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

exception handling bug in b18 g++


I seem to have found some odd bug in exception handling: after
a catch block in a member function, the this pointer is corrupted:

--------------------------test.C------------------------------------
#include <iostream.h>

class X
{
  int x;
public:
  void foo();
};

void printit(void *p) 
{
  cerr << p << endl; 
}

void X::foo()
{
  printit(this);
  try
    { 
      printit(this);
      throw 1; 
    }
  catch(int)
    {
      printit(this); 
    }
  printit(this);
}

main()
{
  X x;
  x.foo();
}
----------------------------------------------------------------------
When I try this, I get:

bash$ g++ -fexceptions test.C -o test
bash$ ./test
0x241f464
0x241f464
0x241f464
0x40c0f8

As a side note, a possible quick fix is to turn on optimization:
bash$ g++ -O -fexceptions test.C -o test
bash$ ./test
0x241f464
0x241f464
0x241f464
0x241f464

	Benjamin Scarlet
	scarlet@mit.edu

-----------------------------------------------------------------------
Configuration particulars:
Pentium II, Windows NT 4.0 (service pack 3)

An even further aside:  I don't know how extensive the Cygnus changes to
the g++ exception handling code are, so I figured it wouldn't hurt to
try this
program on a Linux box with vanilla gcc-2.7.2.1:  There I get no
problem.
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".


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