* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@164024
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
/* 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)
{
#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;
int
main(int argc, char *argv[])
{
- _objc_unexpected_exception = my_exception_handler;
+ objc_setUncaughtExceptionHandler (my_exception_handler);
@try
{
--- /dev/null
+/* 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
--- /dev/null
+#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;
+}