[cfe-commits] r93219 - in /cfe/trunk: lib/Frontend/RewriteObjC.cpp test/Rewriter/rewrite-eh.m

Fariborz Jahanian fjahanian at apple.com
Mon Jan 11 17:22:23 PST 2010


Author: fjahanian
Date: Mon Jan 11 19:22:23 2010
New Revision: 93219

URL: http://llvm.org/viewvc/llvm-project?rev=93219&view=rev
Log:
Fix rewriting of MacOS sjlj based eh.
Fixes radar 7522880.


Added:
    cfe/trunk/test/Rewriter/rewrite-eh.m
Modified:
    cfe/trunk/lib/Frontend/RewriteObjC.cpp

Modified: cfe/trunk/lib/Frontend/RewriteObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/RewriteObjC.cpp?rev=93219&r1=93218&r2=93219&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/RewriteObjC.cpp (original)
+++ cfe/trunk/lib/Frontend/RewriteObjC.cpp Mon Jan 11 19:22:23 2010
@@ -1757,10 +1757,10 @@
         buf += "1) { ";
         ReplaceText(startLoc, lParenLoc-startBuf+1, buf.c_str(), buf.size());
         sawIdTypedCatch = true;
-      } else if (const PointerType *pType = t->getAs<PointerType>()) {
-        ObjCInterfaceType *cls; // Should be a pointer to a class.
-
-        cls = dyn_cast<ObjCInterfaceType>(pType->getPointeeType().getTypePtr());
+      } else if (t->isObjCObjectPointerType()) {
+        QualType InterfaceTy = t->getPointeeType();
+        const ObjCInterfaceType *cls = // Should be a pointer to a class.
+          InterfaceTy->getAs<ObjCInterfaceType>();
         if (cls) {
           buf += "objc_exception_match((struct objc_class *)objc_getClass(\"";
           buf += cls->getDecl()->getNameAsString();

Added: cfe/trunk/test/Rewriter/rewrite-eh.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Rewriter/rewrite-eh.m?rev=93219&view=auto

==============================================================================
--- cfe/trunk/test/Rewriter/rewrite-eh.m (added)
+++ cfe/trunk/test/Rewriter/rewrite-eh.m Mon Jan 11 19:22:23 2010
@@ -0,0 +1,20 @@
+// RUN: %clang_cc1 -rewrite-objc -o - %s
+// rdar://7522880
+
+ at interface NSException
+ at end
+
+ at interface Foo
+ at end
+
+ at implementation Foo
+- (void)bar {
+    @try {
+    } @catch (NSException *e) {
+    }
+    @catch (Foo *f) {
+    }
+    @catch (...) {
+    }
+}
+ at end





More information about the cfe-commits mailing list