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 15e52e7eb24a59c6db5f3f1090947563d00ad952..8476cbdf4ec9cfed95fbda61b6168382f3fd3764 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);