diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
index 59f8e137407371489ff75d290648b83bf1eeb627..379d3db97ade1ad8effe85a433bdbd2a45d7e2bd 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
@@ -95,6 +95,11 @@ public final class RBuiltinRootNode extends RRootNode {
             initialize();
             Object[] arguments = new Object[args.length];
             for (int i = 0; i < args.length; i++) {
+                if (args[i] == null) {
+                    CompilerDirectives.transferToInterpreterAndInvalidate();
+                    args[i] = insert(AccessArgumentNode.create(i));
+                    args[i].setFormals(call.getFormals());
+                }
                 arguments[i] = args[i].execute(frame);
             }
             return call.execute(frame, null, new RArgsValuesAndNames(arguments, factory.getSignature()), null);
@@ -117,10 +122,6 @@ public final class RBuiltinRootNode extends RRootNode {
                 assert factory.getSignature().getVarArgCount() == 0 || factory.getSignature().getVarArgIndex() == factory.getSignature().getLength() - 1 : "only last argument can be vararg";
             }
             call = insert(new BuiltinCallNode(builtin, factory, formalArguments, null, true));
-            for (int i = 0; i < args.length; i++) {
-                args[i] = insert(AccessArgumentNode.create(i));
-                args[i].setFormals(formalArguments);
-            }
         }
     }