seh_try_macros2-00
Shaheed R. Haque
srhaque at iee.org
Sat May 17 03:38:29 CDT 2003
Hi Greg,
Not sure if this is off-base, but is it correct to assume that __wine_pop_frame
is based on setjmp/longjmp? If not, ignore the rest of this note.
If it is, then one issue to think about is that all the user variables in the
handler blocks which are also used in the try block must be declared volatile.
For example,
int x;
try
{
...
x = ...
}
handler
{
...
y = x;
}
won't work right unless x is volatile (because the compile's flow analysis and
register usage will get confused). Since the original code is unlikely to be so
marked, you have a problem. In general, AFAICS, any solution implemented at the
language level has this problem...without compiler support you are stuffed.
I am in the middle of solving a similar problem at work (i.e. forward porting
and old C codebase using both exceptions, and a homebrew ORB which also has
exceptions handled in a unified way). The ONLY solution I could come up with
was indeed to use C++'s native exceptions, but wrapped in macros in such a way
that the legacy code works without change. In fact, it works better than the
legacy code because the legacy coders sometimes forgot to mark variables as
volatile :-).
If this is any use to you, contact off-list (I am not subscribed), and I can
assist with the conceptual version of the macros - I've long forgotten the MSVC
exception details.
Thanks, Shaheed
More information about the wine-devel
mailing list