diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java index e97deb79960c8e6294a2c646575b626017c1f7a5..c13c5c004b2639b922437805d9a8d76df6866700 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/vector/CachedReplaceVectorNode.java @@ -555,19 +555,21 @@ final class CachedReplaceVectorNode extends CachedVectorNode { } int resultIndex = 0; - for (int i = 0; i < vectorLength; i++) { - Object element = vector.getDataAtAsObject(i); - if (element != DELETE_MARKER) { - data[resultIndex] = element; - if (hasNames) { - newNames[resultIndex] = names.getDataAt(i); - } - resultIndex++; - if (isPreviousResultSpecialized() && resultIndex > resultLength) { - // got too many elements - CompilerDirectives.transferToInterpreterAndInvalidate(); - previousResultLength = PREVIOUS_RESULT_GENERIC; - return deleteElements(vector, vectorLength); + if (resultLength > 0) { + for (int i = 0; i < vectorLength; i++) { + Object element = vector.getDataAtAsObject(i); + if (element != DELETE_MARKER) { + data[resultIndex] = element; + if (hasNames) { + newNames[resultIndex] = names.getDataAt(i); + } + resultIndex++; + if (isPreviousResultSpecialized() && resultIndex > resultLength) { + // got too many elements + CompilerDirectives.transferToInterpreterAndInvalidate(); + previousResultLength = PREVIOUS_RESULT_GENERIC; + return deleteElements(vector, vectorLength); + } } } }