URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [obj-c++.dg/] [try-catch-2.mm] - Rev 703
Compare with Previous | Blame | View Log
/* Test out '@catch(id foo) {...}', which should catchall uncaught exceptions. *//* Developed by Ziemowit Laski <zlaski@apple.com>. *//* { dg-do run } *//* { dg-xfail-run-if "PR23616" { *-*-* } { "-fgnu-runtime" } { "-fnext-runtime" } } *//* { dg-xfail-if "Needs OBJC2 ABI" { *-*-darwin* && { lp64 && { ! objc2 } } } { "-fnext-runtime" "-fgnu-runtime" } { "" } } *//* { dg-options "-fobjc-exceptions" } */#include "../objc-obj-c++-shared/TestsuiteObject.m"#include <stdio.h>#include <stdlib.h>/* The following is not required in actual user code; we include ithere to check that the compiler generates an internal definition of_setjmp that is consistent with what <setjmp.h> provides. */#include <setjmp.h>#define CHECK_IF(expr) if(!(expr)) abort()@interface Frob: TestsuiteObject@end@implementation Frob: TestsuiteObject@endstatic Frob* _connection = nil;//--------------------------------------------------------------------void test (TestsuiteObject* sendPort){int cleanupPorts = 1;Frob* receivePort = nil;@try {printf ("receivePort = %p\n", receivePort);printf ("sendPort = %p\n", sendPort);printf ("cleanupPorts = %d\n", cleanupPorts);printf ("---\n");receivePort = (Frob *) -1;_connection = (Frob *) -1;printf ("receivePort = %p\n", receivePort);printf ("sendPort = %p\n", sendPort);printf ("cleanupPorts = %d\n", cleanupPorts);printf ("---\n");receivePort = nil;sendPort = nil;cleanupPorts = 0;printf ("receivePort = %p\n", receivePort);printf ("sendPort = %p\n", sendPort);printf ("cleanupPorts = %d\n", cleanupPorts);printf ("---\n");@throw [TestsuiteObject new];}@catch(Frob *obj) {printf ("Exception caught by incorrect handler!\n");CHECK_IF(0);}@catch(id exc) {printf ("Exception caught by correct handler.\n");printf ("receivePort = %p (expected 0x0)\n", receivePort);printf ("sendPort = %p (expected 0x0)\n", sendPort);printf ("cleanupPorts = %d (expected 0)\n", cleanupPorts);printf ("---");CHECK_IF(!receivePort);CHECK_IF(!sendPort);CHECK_IF(!cleanupPorts);}}int main (void) {test((TestsuiteObject *)-1);return 0;}
