Skip to content

Commit 36c69e5

Browse files
committed
Fix two off-by-one errors in the dynamic varargs implementation.
1 parent 55ded03 commit 36c69e5

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

truffle/src/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/bytecode/generator/BytecodeRootNodeElement.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6226,7 +6226,7 @@ private CodeExecutableElement createAfterChild() {
62266226

62276227
if (op.isVariadic && model.hasVariadicReturn) {
62286228
if (op.instruction.signature.dynamicOperandCount > 1) {
6229-
b.startIf().string("childIndex > ").string(op.instruction.signature.dynamicOperandCount - 1).end().startBlock();
6229+
b.startIf().string("childIndex > ").string(op.instruction.signature.dynamicOperandCount - 2).end().startBlock();
62306230
}
62316231

62326232
b.startIf().string("isVariadicReturn(operationCode)").end().startBlock();
@@ -6239,7 +6239,11 @@ private CodeExecutableElement createAfterChild() {
62396239
"variadicReturnIndices.length * 2").end().end();
62406240
b.tree(operationStack.write(op, operationFields.variadicReturnIndices, "variadicReturnIndices"));
62416241
b.end();
6242-
b.statement("variadicReturnIndices[numVariadicReturnIndices] = childIndex");
6242+
if (op.instruction.signature.dynamicOperandCount > 1) {
6243+
b.statement("variadicReturnIndices[numVariadicReturnIndices] = childIndex - " + (op.instruction.signature.dynamicOperandCount - 1));
6244+
} else {
6245+
b.statement("variadicReturnIndices[numVariadicReturnIndices] = childIndex");
6246+
}
62436247
b.tree(operationStack.write(op, operationFields.numVariadicReturnIndices, "numVariadicReturnIndices + 1"));
62446248

62456249
b.end(); // if isVariadicReturn

0 commit comments

Comments
 (0)