Insert patched frame instructions in the right place
Fixes: b/274337639
Change-Id: Iae204ed529f9af5bf5fa3eaacba45128dfa6fd9e
diff --git a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
index 153f85f..d393d72 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -493,7 +493,7 @@
builder.push(frameType);
}
}
- instructions.add(builder.build());
+ instructions.set(instructionIndex, builder.build());
}
}
diff --git a/src/test/java/com/android/tools/r8/cf/frames/InitBeforeNewInInstructionStreamTest.java b/src/test/java/com/android/tools/r8/cf/frames/InitBeforeNewInInstructionStreamTest.java
index 65e0fb1..1d93a7a 100644
--- a/src/test/java/com/android/tools/r8/cf/frames/InitBeforeNewInInstructionStreamTest.java
+++ b/src/test/java/com/android/tools/r8/cf/frames/InitBeforeNewInInstructionStreamTest.java
@@ -3,10 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.cf.frames;
-import static org.junit.Assert.assertThrows;
import static org.junit.Assert.fail;
-import com.android.tools.r8.CompilationFailedException;
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
@@ -61,15 +59,12 @@
@Test
public void testR8() throws Exception {
parameters.assumeR8TestParameters();
- assertThrows(
- CompilationFailedException.class,
- () ->
- testForR8(parameters.getBackend())
- .addProgramClassFileData(patchedDump())
- .addKeepMainRule(MAIN_CLASS)
- .setMinApi(parameters)
- .run(parameters.getRuntime(), MAIN_CLASS)
- .assertSuccessWithOutput(EXPECTED_OUTPUT));
+ testForR8(parameters.getBackend())
+ .addProgramClassFileData(patchedDump())
+ .addKeepMainRule(MAIN_CLASS)
+ .setMinApi(parameters)
+ .run(parameters.getRuntime(), MAIN_CLASS)
+ .assertSuccessWithOutput(EXPECTED_OUTPUT);
}
// This is reproducing b/b274337639, where a new instruction is before the corresponding