Subject: exception handling bug in b18 g++
From: [email-masked] (Benjamin Sean Scarlet)

29 Jul 1997 00:34:37 -0700
Approved: [email-masked]
Distribution: cygnus
Message-ID: <[email-masked]>
Reply-To: [email-masked]
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
X-Mailer: Mozilla 4.01 [en] (WinNT; I)
Original-To: gnu-win32 Mailing List <[email-masked]>
X-Priority: 3 (Normal)
Original-Sender: [email-masked]

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
	[email-masked]

-----------------------------------------------------------------------
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
"[email-masked]" with one line of text: "help".