This is the mail archive of the
cygwin@sourceware.cygnus.com
mailing list for the Cygwin project.
exception handling bug in b18 g++
- To: gnu-win32 Mailing List <gnu-win32 at cygnus dot com>
- Subject: exception handling bug in b18 g++
- From: Benjamin Sean Scarlet <scarlet at mit dot edu>
- Date: Tue, 29 Jul 1997 02:26:40 -0400
- Reply-To: scarlet at mit dot edu
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".