Web lists-archives.org

Re: [Mingw-users] GCC 4.3.0 20080502 (alpha) Released - Please helpus test it!




Brian Dessent wrote:
> "Aaron W. LaFramboise" wrote:
> 
>> -Throwing non-SEH exceptions through arbitrary foreign frames isn't
>> really a valid thing to do anyway unless you're planning to terminate
>> immediately--and maybe not even then.  In the Win32 API case, it appears
>> to work most of the time, but I don't see any guarantee of this
>> documented anywhere.
> 
> Even if your code isn't designed to throw from the WndProc, it often can
> still happen if you have an unexpected exception occur as is common with
> C++ code that heavily uses the STL.

Can you clarify this case?  The STL generally does not throw exceptions 
unless the programmer asks it to.  The only unexpected exception 
situation I can think of is std::bad_alloc.


>  The fact that you can't install a
> catch-all handler at the toplevel that gracefully terminates the app
> with a friendly message means any little unexpected oopsie in the
> windowing code will kill the app cold with an ugly abort() and there's
> nothing you can do about it.

A user can override abort() if he likes.  Or, he can catch exceptions in 
the callback and propagate it properly.  In the WindowProc case, this 
means either rethrowing with SEH using RaiseException() or returning 
WM_QUIT--which as far as I know are the only documented valid means of 
leaving a WindowProc anyway.


 > Any codepath that goes through code that wasn't
> compiled with a DW2-enabled compiler is a potential source of failure --

This is also true of any other exception strategy, including both SEH 
and SJLJ.  It is not valid to throw through functions that don't know 
about exceptions unless they are specially written to accommodate this. 
  The primary problems are that it may leave dynamic data structures in 
an incoherent state or it may leak resources.


I understand the situation is not ideal, but due to the presence of the 
other mentioned mitigating factors, it seems this is the best way to 
proceed.

The users for whom this is problematic will simply have to wait a little 
longer to upgrade; but these are the users who will likely benefit the 
least from the newer versions, as they don't require the newer features 
anyway.


Here's some alternatives, and the reasons they were discarded.

-Delay release: No reason to delay release for everyone when only a 
minority user subset is affected.  We need to get this thing moving.

-Two separate compilers: Releasing two compilers with two incompatible 
ABIs will probably cause serious problems for our C++ users, hitting 
again once SJLJ is dropped, which would be fairly soon anyway.

-Only SJLJ: The poor performance of SJLJ makes Java impractically slow, 
and even in C++ causes problems for some code.  The ABI would be broken, 
again, during the upgrade, which, as I mentioned, will happen fairly 
soon.  There probably is only marginal value in releasing such a compiler.


What do you think?

-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Don't miss this year's exciting event. There's still time to save $100. 
Use priority code J8TL2D2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
MinGW-users mailing list
MinGW-users@xxxxxxxxxxxxxxxxxxxxx

You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users