Enable CF on Regress65432240 test.
Change-Id: I6bc61d59971ec8f8d4d91dc000452f077aefeec1
diff --git a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
index 6290e20..b97cd7e 100644
--- a/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
+++ b/src/test/java/com/android/tools/r8/jasmin/Regress65432240.java
@@ -6,18 +6,39 @@
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import com.android.tools.r8.R8Command;
import com.android.tools.r8.ToolHelper;
-import com.android.tools.r8.code.IfNez;
-import com.android.tools.r8.graph.DexCode;
-import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.jasmin.JasminBuilder.ClassFileVersion;
import com.android.tools.r8.naming.MemberNaming.MethodSignature;
import com.android.tools.r8.utils.AndroidApp;
+import com.android.tools.r8.utils.codeinspector.CfInstructionSubject;
+import com.android.tools.r8.utils.codeinspector.ClassSubject;
+import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.android.tools.r8.utils.codeinspector.InstructionSubject;
+import com.android.tools.r8.utils.codeinspector.MethodSubject;
import com.google.common.collect.ImmutableList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+@RunWith(Parameterized.class)
public class Regress65432240 extends JasminTestBase {
+ private Backend backend;
+
+ @Parameterized.Parameters(name = "Backend: {0}")
+ public static Collection<Backend> data() {
+ return Arrays.asList(Backend.values());
+ }
+
+ public Regress65432240(Backend backend) {
+ this.backend = backend;
+ }
+
@Test
public void testConstantNotIntoEntryBlock() throws Exception {
JasminBuilder builder = new JasminBuilder(ClassFileVersion.JDK_1_4);
@@ -58,13 +79,38 @@
String expected = runOnJava(builder, clazz.name);
AndroidApp originalApplication = builder.build();
- AndroidApp processedApplication = ToolHelper.runR8(originalApplication);
+ AndroidApp processedApplication =
+ ToolHelper.runR8(
+ R8Command.builder(originalApplication)
+ .setProgramConsumer(emptyConsumer(backend))
+ .addLibraryFiles(runtimeJar(backend))
+ .build());
- DexEncodedMethod method = getMethod(processedApplication, clazz.name, signature);
- DexCode code = method.getCode().asDexCode();
- assertTrue(code.instructions[0] instanceof IfNez);
+ CodeInspector inspector =
+ new CodeInspector(processedApplication, o -> o.enableCfFrontend = true);
+ ClassSubject inspectedClass = inspector.clazz(clazz.name);
+ MethodSubject method = inspectedClass.method(signature);
+ assertTrue(method.isPresent());
+ Iterator<InstructionSubject> iterator = method.iterateInstructions();
+ InstructionSubject instruction = null;
+ boolean found = false;
+ while (iterator.hasNext()) {
+ instruction = iterator.next();
+ if (!(instruction instanceof CfInstructionSubject)
+ || !((CfInstructionSubject) instruction).isLoad()) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue(found && instruction.isIfNez());
- String artResult = runOnArtR8(builder, clazz.name);
- assertEquals(expected, artResult);
+ String result;
+ if (backend == Backend.DEX) {
+ result = runOnArt(processedApplication, clazz.name);
+ } else {
+ assert backend == Backend.CF;
+ result = runOnJava(processedApplication, clazz.name, Collections.emptyList());
+ }
+ assertEquals(expected, result);
}
}
diff --git a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
index 6aa54df..f639e87 100644
--- a/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
+++ b/src/test/java/com/android/tools/r8/utils/codeinspector/CfInstructionSubject.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.cf.code.CfInvoke;
import com.android.tools.r8.cf.code.CfInvokeDynamic;
import com.android.tools.r8.cf.code.CfLabel;
+import com.android.tools.r8.cf.code.CfLoad;
import com.android.tools.r8.cf.code.CfNew;
import com.android.tools.r8.cf.code.CfNop;
import com.android.tools.r8.cf.code.CfPosition;
@@ -155,4 +156,8 @@
public boolean isIfNull() {
return instruction instanceof CfIf && ((CfIf) instruction).getOpcode() == Opcodes.IFNULL;
}
+
+ public boolean isLoad() {
+ return instruction instanceof CfLoad;
+ }
}