Enable R8 partial in constant dynamic desugaring tests
Fixes: b/414327631
Change-Id: I88d929bb6e7b18078275013ee23e533be419b3fb
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
index 7a72b2d..31d4a1c 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/constantdynamic/ConstantDynamicClass.java
@@ -57,8 +57,10 @@
import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizations;
import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizations.MethodSynthesizerConsumer;
import com.android.tools.r8.ir.optimize.UtilityMethodsForCodeOptimizations.UtilityMethodForCodeOptimizations;
+import com.android.tools.r8.partial.R8PartialSubCompilationConfiguration;
import com.android.tools.r8.synthesis.SyntheticProgramClassBuilder;
import com.android.tools.r8.utils.AndroidApiLevel;
+import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.ListUtils;
import com.google.common.collect.ImmutableList;
import java.util.Collection;
@@ -391,8 +393,7 @@
if (finalDefinition != null) {
// Since we've copied the code object from an existing method, the code should already be
// processed, and thus we don't need to schedule it for processing in D8.
- assert !appView.options().isGeneratingClassFiles() || finalDefinition.getCode().isCfCode();
- assert !appView.options().isGeneratingDex() || finalDefinition.getCode().isDexCode();
+ assert verifyCodeMatchesBackend(appView, finalDefinition);
finalMethod = finalDefinition.asProgramMethod(bootstrapMethodHolder);
eventConsumer.acceptConstantDynamicRewrittenBootstrapMethod(
finalMethod, bootstrapMethodReference);
@@ -405,6 +406,21 @@
assert finalMethod.getDefinition().isPublicMethod();
}
+ private boolean verifyCodeMatchesBackend(AppView<?> appView, DexEncodedMethod method) {
+ InternalOptions options = appView.options();
+ if (options.isGeneratingClassFiles()) {
+ assert method.getCode().isCfCode();
+ } else if (options.isGeneratingDex()) {
+ R8PartialSubCompilationConfiguration subCompilationConfiguration =
+ options.partialSubCompilationConfiguration;
+ assert method.getCode().isDexCode()
+ || (subCompilationConfiguration != null
+ && subCompilationConfiguration.isD8()
+ && method.getCode().isLirCode());
+ }
+ return true;
+ }
+
@SuppressWarnings("ReferenceEquality")
private DexType mapLookupTypeToObject(DexType type) {
return type == appView.dexItemFactory().lookupType ? appView.dexItemFactory().objectType : type;
@@ -412,25 +428,26 @@
private Code adaptCode(DexEncodedMethod method) {
assert behaviour == CACHE_CONSTANT;
- if (method.getCode().isDexCode()) {
- return method.getCode();
+ Code code = method.getCode();
+ if (code.isDexCode() || code.isLirCode()) {
+ return code;
}
- CfCode code = method.getCode().asCfCode();
+ CfCode cfCode = code.asCfCode();
List<CfInstruction> newInstructions =
ListUtils.mapOrElse(
- code.getInstructions(),
+ cfCode.getInstructions(),
instruction ->
instruction.isFrame()
? instruction.asFrame().mapReferenceTypes(this::mapLookupTypeToObject)
: instruction);
- return code.getInstructions() != newInstructions
+ return cfCode.getInstructions() != newInstructions
? new CfCode(
method.getHolderType(),
- code.getMaxStack(),
- code.getMaxLocals(),
+ cfCode.getMaxStack(),
+ cfCode.getMaxLocals(),
newInstructions,
- code.getTryCatchRanges(),
- code.getLocalVariables())
- : code;
+ cfCode.getTryCatchRanges(),
+ cfCode.getLocalVariables())
+ : cfCode;
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
index 9146b3e..6ed7eb2 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/BasicConstantDynamicTest.java
@@ -54,8 +54,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicGetDeclaredMethodsTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicGetDeclaredMethodsTest.java
index 41e90c1..13615a0 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicGetDeclaredMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicGetDeclaredMethodsTest.java
@@ -70,8 +70,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
index b63dc47..02fedef 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicInDefaultInterfaceMethodTest.java
@@ -54,8 +54,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClasses(MAIN_CLASS)
.addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsUsingSameSymbolicReferenceTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsUsingSameSymbolicReferenceTest.java
index 583f63f..bf8b736 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsUsingSameSymbolicReferenceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsUsingSameSymbolicReferenceTest.java
@@ -55,8 +55,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.addProgramClasses(Main.class)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsWithDifferentSymbolicReferenceUsingSameBSMAndArgumentsTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsWithDifferentSymbolicReferenceUsingSameBSMAndArgumentsTest.java
index 6b63a17..4d005cc 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsWithDifferentSymbolicReferenceUsingSameBSMAndArgumentsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicMultipleConstantsWithDifferentSymbolicReferenceUsingSameBSMAndArgumentsTest.java
@@ -56,8 +56,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(classFileData)
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicRegress272346803Test.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicRegress272346803Test.java
index b9c1aaf..e7a842c 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicRegress272346803Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicRegress272346803Test.java
@@ -57,8 +57,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClasses(Main.class)
.addProgramClassFileData(getTransformedClasses())
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
index eeae7ed..0e09283 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleBootstrapMethodConstantDynamicTest.java
@@ -55,8 +55,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleNamedConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleNamedConstantDynamicTest.java
index c88a149..c63486f 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleNamedConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleNamedConstantDynamicTest.java
@@ -56,8 +56,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), MAIN_CLASS)
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleTypesConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleTypesConstantDynamicTest.java
index d307e81..9871533 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleTypesConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/MultipleTypesConstantDynamicTest.java
@@ -55,8 +55,6 @@
@Test
public void testDesugaring() throws Exception {
- // TODO(b/414327631): Fixme.
- parameters.assumeNoPartialCompilation();
testForDesugaring(parameters)
.addProgramClassFileData(getTransformedClasses())
.run(parameters.getRuntime(), MAIN_CLASS)