diff options
Diffstat (limited to 'gcc-4.9/gcc/testsuite/objc/execute/exceptions/matcher-1.m')
-rw-r--r-- | gcc-4.9/gcc/testsuite/objc/execute/exceptions/matcher-1.m | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/objc/execute/exceptions/matcher-1.m b/gcc-4.9/gcc/testsuite/objc/execute/exceptions/matcher-1.m new file mode 100644 index 000000000..cbe4365da --- /dev/null +++ b/gcc-4.9/gcc/testsuite/objc/execute/exceptions/matcher-1.m @@ -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/runtime.h> +#include <objc/objc-exception.h> +#include "../../../objc-obj-c++-shared/TestsuiteObject.m" +#include <stdlib.h> + +static unsigned int handlerExpected = 0; + +void +my_exception_matcher(Class match_class, id exception) +{ + /* Always matches. */ + return 1; +} + +@interface A : TestsuiteObject +@end + +@implementation A +@end + +@interface B : TestsuiteObject +@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 |