Mercurial > hg > CbC > CbC_gcc
view gcc/testsuite/obj-c++.dg/try-catch-2.mm @ 125:2c7bdd5a49f6
supress return with no value, in function returning non-void warning on goto code segment in normal function
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 01 Apr 2018 14:05:45 +0900 |
parents | 04ced10e8804 |
children |
line wrap: on
line source
/* Test out '@catch(id foo) {...}', which should catch all 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 it here 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 @end static 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; }