throw-nil.m: New test.

* objc/execute/exceptions/throw-nil.m: New test.
	* objc/execute/exceptions/handler-1.m: Updated to use the new
	objc_set_uncaught_exception_handler() function.
	* objc/execute/exceptions/matcher-1.m: New test.

From-SVN: r164024
This commit is contained in:
Nicola Pero 2010-09-08 21:03:51 +00:00 committed by Nicola Pero
parent e30511ed4b
commit 2023bba815
4 changed files with 118 additions and 3 deletions

View File

@ -1,3 +1,10 @@
2010-09-08 Nicola Pero <nicola.pero@meta-innovation.com>
* objc/execute/exceptions/throw-nil.m: New test.
* objc/execute/exceptions/handler-1.m: Updated to use the new
objc_set_uncaught_exception_handler() function.
* objc/execute/exceptions/matcher-1.m: New test.
2010-09-08 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
PR fortran/38282

View File

@ -2,7 +2,9 @@
/* Author: David Ayers */
#ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. */
/* This test only runs for the GNU runtime. TODO: It should work on
the NEXT runtime as well (needs testing).
*/
int main(void)
{
@ -12,8 +14,8 @@ int main(void)
#else
#include <objc/objc-api.h>
#include <objc/objc-exception.h>
#include <objc/Object.h>
#include <stdio.h>
#include <stdlib.h>
static unsigned int handlerExpected = 0;
@ -31,7 +33,7 @@ my_exception_handler(id excp)
int
main(int argc, char *argv[])
{
_objc_unexpected_exception = my_exception_handler;
objc_setUncaughtExceptionHandler (my_exception_handler);
@try
{

View File

@ -0,0 +1,68 @@
/* Test custom exception matchers */
/* Author: Nicola Pero */
#ifdef __NEXT_RUNTIME__
/* This test only runs for the GNU runtime. TODO: It should work on
the NEXT runtime as well (needs testing).
*/
int main(void)
{
return 0;
}
#else
#include <objc/objc-api.h>
#include <objc/objc-exception.h>
#include <objc/Object.h>
#include <stdlib.h>
static unsigned int handlerExpected = 0;
void
my_exception_matcher(Class match_class, id exception)
{
/* Always matches. */
return 1;
}
@interface A : Object
@end
@implementation A
@end
@interface B : Object
@end
@implementation B
@end
int
main(int argc, char *argv[])
{
objc_setExceptionMatcher (my_exception_matcher);
@try
{
@throw [A new];
}
@catch (B *exception)
{
/* Since we installed an exception matcher that always matches,
the exception should be sent here even if it's of class A and
this is looking for exceptions of class B.
*/
return 0;
}
@catch (id exception)
{
abort ();
}
abort ();
}
#endif

View File

@ -0,0 +1,38 @@
#include <objc/objc.h>
#include <objc/Object.h>
/* Test throwing a nil exception. A 'nil' exception can only be
* caugth by a generic exception handler.
*/
int main (void)
{
int exception_catched = 0;
int finally_called = 0;
@try
{
@throw nil;
}
@catch (Object *exc)
{
abort ();
}
@catch (id exc)
{
exception_catched = 1;
}
@finally
{
finally_called = 1;
}
if (exception_catched != 1
|| finally_called != 1)
{
abort ();
}
return 0;
}