]> granicus.if.org Git - clang/commitdiff
Simple @throw support.
authorAnders Carlsson <andersca@mac.com>
Tue, 9 Sep 2008 16:16:55 +0000 (16:16 +0000)
committerAnders Carlsson <andersca@mac.com>
Tue, 9 Sep 2008 16:16:55 +0000 (16:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@55991 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGObjCMac.cpp

index ea34d11318c788eac82c6f89960de87c0fbd4ea0..e060c671f03a43cf1d273c64fe9b5afba5b34845 100644 (file)
@@ -1429,7 +1429,18 @@ void CGObjCMac::EmitTryStmt(CodeGen::CodeGenFunction &CGF,
 void CGObjCMac::EmitThrowStmt(CodeGen::CodeGenFunction &CGF,
                               const ObjCAtThrowStmt &S)
 {
-  CGF.ErrorUnsupported(&S, "@throw statement");
+  llvm::Value *ExceptionAsObject;
+  
+  if (const Expr *ThrowExpr = S.getThrowExpr()) {
+    llvm::Value *Exception = CGF.EmitScalarExpr(ThrowExpr);
+    ExceptionAsObject = 
+      CGF.Builder.CreateBitCast(Exception, ObjCTypes.ObjectPtrTy, "tmp");
+  } else {
+    assert(0 && "FIXME: rethrows not supported!");
+  }
+  
+  CGF.Builder.CreateCall(ObjCTypes.ExceptionThrowFn, ExceptionAsObject);
+
 }
 
 /* *** Private Interface *** */