From 50414729fbd2bc49c42a78090d1d51049a31ed0e Mon Sep 17 00:00:00 2001
From: Christian Humer <christian.humer@oracle.com>
Date: Mon, 19 Oct 2015 20:37:13 +0200
Subject: [PATCH] Handle foreign execution errors less severe in FastR.

---
 .../src/com/oracle/truffle/r/nodes/function/RCallNode.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
index 15e52e7eb2..8476cbdf4e 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java
@@ -258,7 +258,12 @@ public final class RCallNode extends RNode implements RSyntaxNode {
                 foreignCall = insert(Message.createExecute(argumentsArray.length).createNode());
                 foreignCallArgCount = argumentsArray.length;
             }
-            return ForeignAccess.execute(foreignCall, frame, (TruffleObject) functionObject, argumentsArray);
+            try {
+                return ForeignAccess.execute(foreignCall, frame, (TruffleObject) functionObject, argumentsArray);
+            } catch (Throwable e) {
+                errorProfile.enter();
+                throw RError.error(this, RError.Message.GENERIC, "Foreign function failed: " + e.getMessage() != null ? e.getMessage() : e.toString());
+            }
         } else {
             errorProfile.enter();
             throw RError.error(this, RError.Message.APPLY_NON_FUNCTION);
-- 
GitLab