68 lines
1.0 KiB
Mathematica
68 lines
1.0 KiB
Mathematica
|
// RUN: %clang_cc1 -x objective-c -Wno-return-type -fblocks -fms-extensions -rewrite-objc %s -o %t-rw.cpp
|
||
|
// RUN: %clang_cc1 -fsyntax-only -fcxx-exceptions -fexceptions -Wno-address-of-temporary -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
|
||
|
|
||
|
typedef struct objc_class *Class;
|
||
|
typedef struct objc_object {
|
||
|
Class isa;
|
||
|
} *id;
|
||
|
|
||
|
void *sel_registerName(const char *);
|
||
|
|
||
|
@interface Foo @end
|
||
|
void TRY();
|
||
|
void SPLATCH();
|
||
|
void MYTRY();
|
||
|
void MYCATCH();
|
||
|
|
||
|
void foo() {
|
||
|
@try { TRY(); }
|
||
|
@catch (...) { SPLATCH(); @throw; }
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
|
||
|
@try {
|
||
|
MYTRY();
|
||
|
}
|
||
|
|
||
|
@catch (Foo* localException) {
|
||
|
MYCATCH();
|
||
|
@throw localException;
|
||
|
}
|
||
|
|
||
|
// no catch clause
|
||
|
@try { }
|
||
|
@finally { }
|
||
|
}
|
||
|
|
||
|
|
||
|
@interface INST
|
||
|
{
|
||
|
INST* throw_val;
|
||
|
}
|
||
|
|
||
|
- (id) ThrowThis;
|
||
|
|
||
|
- (void) MainMeth;
|
||
|
|
||
|
@end
|
||
|
|
||
|
|
||
|
@implementation INST
|
||
|
- (id) ThrowThis { return 0; }
|
||
|
|
||
|
- (void) MainMeth {
|
||
|
@try {
|
||
|
MYTRY();
|
||
|
}
|
||
|
@catch (Foo* localException) {
|
||
|
MYCATCH();
|
||
|
@throw [self ThrowThis];
|
||
|
}
|
||
|
@catch (...) {
|
||
|
@throw [throw_val ThrowThis];
|
||
|
}
|
||
|
}
|
||
|
@end
|