summaryrefslogtreecommitdiffstats
path: root/test/Rewriter
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-03-16 16:52:06 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-03-16 16:52:06 +0000
commit40539467ec19e6bc53d47ba650f42aa3f414a53f (patch)
treec222a8cafac8dcc2479910d2ce010ef7ab01f449 /test/Rewriter
parent0961a01ebec0e31664bfe464bf4a0ac7b0891a1f (diff)
modern objective-c translator: writing @throw statement.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@152931 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Rewriter')
-rw-r--r--test/Rewriter/rewrite-modern-throw.m62
1 files changed, 62 insertions, 0 deletions
diff --git a/test/Rewriter/rewrite-modern-throw.m b/test/Rewriter/rewrite-modern-throw.m
new file mode 100644
index 0000000000..96d0e1c9ec
--- /dev/null
+++ b/test/Rewriter/rewrite-modern-throw.m
@@ -0,0 +1,62 @@
+// 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"id=void*" -D"SEL=void*" -D"__declspec(X)=" %t-rw.cpp
+
+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