Conflict resolution.

This commit is contained in:
tv 1998-12-13 00:12:17 +00:00
parent b33907f299
commit b5075450ce

View File

@ -3061,10 +3061,6 @@ __empty ()
#include "eh-common.h" #include "eh-common.h"
/* This is a safeguard for dynamic handler chain. */
static void *top_elt[2];
/* Allocate and return a new EH context structure. */ /* Allocate and return a new EH context structure. */
extern void __throw (); extern void __throw ();
@ -3072,15 +3068,26 @@ extern void __throw ();
static void * static void *
new_eh_context () new_eh_context ()
{ {
struct eh_context *eh = (struct eh_context *) malloc (sizeof *eh); struct eh_full_context {
if (! eh) struct eh_context c;
void *top_elt[2];
} *ehfc = (struct eh_full_context *) malloc (sizeof *ehfc);
if (! ehfc)
__terminate (); __terminate ();
memset (eh, 0, sizeof *eh); memset (ehfc, 0, sizeof *ehfc);
eh->dynamic_handler_chain = top_elt; ehfc->c.dynamic_handler_chain = (void **) ehfc->top_elt;
return eh; /* This should optimize out entirely. This should always be true,
but just in case it ever isn't, don't allow bogus code to be
generated. */
if ((void*)(&ehfc->c) != (void*)ehfc)
__terminate ();
return &ehfc->c;
} }
#if __GTHREADS #if __GTHREADS
@ -3277,7 +3284,7 @@ __sjthrow ()
/* We must call terminate if we try and rethrow an exception, when /* We must call terminate if we try and rethrow an exception, when
there is no exception currently active and when there are no there is no exception currently active and when there are no
handlers left. */ handlers left. */
if (! eh->info || (*dhc) == top_elt) if (! eh->info || (*dhc)[0] == 0)
__terminate (); __terminate ();
/* Find the jmpbuf associated with the top element of the dynamic /* Find the jmpbuf associated with the top element of the dynamic