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);