You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

66 lines
932 B
Objective-C

#include "Test.h"
#include "../unwind.h"
#if __cplusplus
#error This is not an ObjC++ test!
#endif
struct
{
struct _Unwind_Exception header;
id x;
} foreign_exception;
BOOL cleanup_called = NO;
BOOL finally_called = NO;
static void cleanup(_Unwind_Reason_Code i,struct _Unwind_Exception *e)
{
assert(e == &foreign_exception.header);
cleanup_called = YES;
}
int throw(void)
{
foreign_exception.header.exception_class = 42;
foreign_exception.header.exception_cleanup = cleanup;
foreign_exception.x = (id)12;
_Unwind_RaiseException(&foreign_exception.header);
assert(0);
}
void finally(void)
{
@try
{
throw();
}
@finally
{
finally_called = YES;
}
finally_called = NO;
}
int main(void)
{
BOOL catchall = NO;
@try
{
finally();
}
@catch (id x)
{
assert(0);
}
@catch(...)
{
catchall = YES;
}
assert(finally_called == YES);
assert(catchall == YES);
assert(cleanup_called == YES);
return 0;
}