delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/1997/07/29/11:42:44

From: weiku AT UTKUX1 DOT UTK DOT EDU ("Wei Ku")
Subject: Re: exception handling bug in b18 g++
29 Jul 1997 11:42:44 -0700 :
Approved: cygnus DOT gnu-win32 AT cygnus DOT com
Distribution: cygnus
Message-ID: <199707291431.KAA41618.cygnus.gnu-win32@solid.ssd.ornl.gov>
Mime-Version: 1.0
Original-To: <scarlet AT MIT DOT EDU>, "gnu-win32 Mailing List" <gnu-win32 AT cygnus DOT com>
X-Priority: 3
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook Express 4.71.1008.3
X-MimeOle: Produced By Microsoft MimeOLE Engine V4.71.1008.3
Original-Sender: owner-gnu-win32 AT cygnus DOT com

 Can g++ treat 'exception handling' correctly ? I thought it can not even in
UNIX machine.

Sincerely,
Wei Ku

***************************************
Department of Physics and Astronomy
The University of Tennessee
1408 Circle Drive
Knoxville, Tennessee 37996-1200
weiku AT utkux DOT utcc DOT utk DOT edu
---------------------------------------
Solid State Division
Oak Ridge National Laboratory
P.O.Box 2008
Oak Ridge, TN 37831-6032
Phone: (423) 574-5795
Fax: (423) 574-4143
weiku AT solid DOT ssd DOT ornl DOT gov
***************************************

-----Original Message-----
From: Benjamin Sean Scarlet <scarlet AT mit DOT edu>
To: gnu-win32 Mailing List <gnu-win32 AT cygnus DOT com>
Date: Tuesday, July 29, 1997 8:34 AM
Subject: 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 AT mit DOT 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 AT cygnus DOT com" with one line of text: "help".
>

-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019