diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/DLL.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/DLL.java
index 6883c1cf3494e3d5afbaa320727498fa4b0a862c..2e5366f96c062c017a51c81dea19bc39bc909dea 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/DLL.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/ffi/DLL.java
@@ -277,6 +277,9 @@ public class DLL {
                 initCritical.acquire();
                 try {
                     RFFIFactory.getRFFI().getCallRFFI().invokeVoidCall(symbolInfo.address, symbolInfo.symbol, new Object[]{dllInfo});
+                } catch (ReturnException ex) {
+                    // An error call can, due to condition handling, throw this which we must propogate
+                    throw ex;
                 } catch (Throwable ex) {
                     if (RContext.isInitialContextInitialized()) {
                         throw new DLLException(RError.Message.DLL_RINIT_ERROR);