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:
parent
e30511ed4b
commit
2023bba815
@ -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
|
||||
|
@ -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
|
||||
{
|
||||
|
68
gcc/testsuite/objc/execute/exceptions/matcher-1.m
Normal file
68
gcc/testsuite/objc/execute/exceptions/matcher-1.m
Normal 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
|
38
gcc/testsuite/objc/execute/exceptions/throw-nil.m
Normal file
38
gcc/testsuite/objc/execute/exceptions/throw-nil.m
Normal 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;
|
||||
}
|
Loading…
Reference in New Issue
Block a user