Temporarily disable unrepresentable instruction rewriting
Bug: b/238175192
Change-Id: I6fc663f089fc26b8de0ec5c1ef5725c9ab8c1a4f
diff --git a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
index 3e41a70..c48cd2f 100644
--- a/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
+++ b/src/main/java/com/android/tools/r8/ir/desugar/NonEmptyCfInstructionDesugaringCollection.java
@@ -137,7 +137,9 @@
if (recordRewriter != null) {
desugarings.add(recordRewriter);
}
- yieldingDesugarings.add(new UnrepresentableInDexInstructionRemover(appView));
+ if (appView.options().enableUnrepresentableInDexInstructionRemoval) {
+ yieldingDesugarings.add(new UnrepresentableInDexInstructionRemover(appView));
+ }
}
static NonEmptyCfInstructionDesugaringCollection createForCfToCfNonDesugar(AppView<?> appView) {
@@ -158,8 +160,10 @@
new NonEmptyCfInstructionDesugaringCollection(appView, noAndroidApiLevelCompute());
desugaringCollection.desugarings.add(new InvokeSpecialToSelfDesugaring(appView));
desugaringCollection.desugarings.add(new InvokeToPrivateRewriter());
- desugaringCollection.yieldingDesugarings.add(
- new UnrepresentableInDexInstructionRemover(appView));
+ if (appView.options().enableUnrepresentableInDexInstructionRemoval) {
+ desugaringCollection.yieldingDesugarings.add(
+ new UnrepresentableInDexInstructionRemover(appView));
+ }
return desugaringCollection;
}
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 7d6d982..78547de 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -397,6 +397,9 @@
// Boolean value indicating that byte code pass through may be enabled.
public boolean enableCfByteCodePassThrough = false;
+ // TODO(b/238175192): remove again when resolved
+ public boolean enableUnrepresentableInDexInstructionRemoval = false;
+
// Flag to control the representation of stateless lambdas.
// See b/222081665 for context.
public boolean createSingletonsForStatelessLambdas =
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/InvokeMethodHandleRuntimeErrorTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/InvokeMethodHandleRuntimeErrorTest.java
index 889fd91..1fcabcd 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/InvokeMethodHandleRuntimeErrorTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/InvokeMethodHandleRuntimeErrorTest.java
@@ -67,6 +67,9 @@
.addProgramClassFileData(getInvokeCustomTransform())
.setMinApi(parameters.getApiLevel())
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics -> {
if (hasCompileSupport()) {
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/MethodHandleTestRunner.java b/src/test/java/com/android/tools/r8/cf/methodhandles/MethodHandleTestRunner.java
index 1812854..ae44ac9 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/MethodHandleTestRunner.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/MethodHandleTestRunner.java
@@ -104,6 +104,9 @@
.addProgramClasses(getInputClasses())
.addProgramClassFileData(getTransformedClasses())
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), CLASS.getName())
.apply(this::checkResult);
@@ -117,7 +120,10 @@
.addProgramClasses(getInputClasses())
.addProgramClassFileData(getTransformedClasses())
.addLibraryFiles(ToolHelper.getMostRecentAndroidJar())
- .addNoVerticalClassMergingAnnotations();
+ .addNoVerticalClassMergingAnnotations()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true);
if (minifyMode == MinifyMode.MINIFY) {
builder
.enableProguardTestOptions()
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/fields/ClassFieldMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/fields/ClassFieldMethodHandleTest.java
index 062f22e..aac5a20 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/fields/ClassFieldMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/fields/ClassFieldMethodHandleTest.java
@@ -73,6 +73,9 @@
.addProgramClassFileData(getTransformedMain())
.setMinApi(parameters.getApiLevel())
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
@@ -88,6 +91,9 @@
.setMinApi(parameters.getApiLevel())
.allowDiagnosticMessages()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/fields/InterfaceFieldMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/fields/InterfaceFieldMethodHandleTest.java
index 3d62b40..629a737 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/fields/InterfaceFieldMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/fields/InterfaceFieldMethodHandleTest.java
@@ -76,6 +76,9 @@
.addProgramClassFileData(getTransformedMain())
.setMinApi(parameters.getApiLevel())
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
@@ -91,6 +94,9 @@
.setMinApi(parameters.getApiLevel())
.allowDiagnosticMessages()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
index 459ce08..70d3aec 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
@@ -76,6 +76,9 @@
.addProgramClassFileData(getTransformedD())
.setMinApi(parameters.getApiLevel())
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
@@ -91,6 +94,9 @@
.setMinApi(parameters.getApiLevel())
.allowDiagnosticMessages()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(this::checkDiagnostics)
.run(parameters.getRuntime(), Main.class)
.apply(this::checkResult);
diff --git a/src/test/java/com/android/tools/r8/code/invokedynamic/CompileGuavaWithUnrepresentableRewritingTest.java b/src/test/java/com/android/tools/r8/code/invokedynamic/CompileGuavaWithUnrepresentableRewritingTest.java
index c747eff..655675e 100644
--- a/src/test/java/com/android/tools/r8/code/invokedynamic/CompileGuavaWithUnrepresentableRewritingTest.java
+++ b/src/test/java/com/android/tools/r8/code/invokedynamic/CompileGuavaWithUnrepresentableRewritingTest.java
@@ -39,12 +39,13 @@
CompilationFailedException.class,
() -> {
testForD8(Backend.DEX)
- // DEPS contains all R8 dependencies, including guava, which extends the surface
- // of UnrepresentableRewriting.
.addProgramFiles(ToolHelper.DEPS)
.setMinApi(AndroidApiLevel.B)
.disableDesugaring()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics
diff --git a/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeCustomRuntimeErrorTest.java b/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeCustomRuntimeErrorTest.java
index cf34d5d..1fa8060 100644
--- a/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeCustomRuntimeErrorTest.java
+++ b/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeCustomRuntimeErrorTest.java
@@ -89,6 +89,9 @@
.setMinApi(parameters.getApiLevel())
.disableDesugaring()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics
@@ -110,6 +113,8 @@
.addProgramClassFileData(getTransformedTestClass())
.setMinApi(minApi)
.mapUnsupportedFeaturesToWarnings()
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics -> {
if (expectedSuccess) {
diff --git a/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeDynamicVirtualDispatchToDefaultInterfaceMethodTest.java b/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeDynamicVirtualDispatchToDefaultInterfaceMethodTest.java
index 7494b13..c2caab7 100644
--- a/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeDynamicVirtualDispatchToDefaultInterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/code/invokedynamic/InvokeDynamicVirtualDispatchToDefaultInterfaceMethodTest.java
@@ -71,6 +71,9 @@
.addProgramClassFileData(getTransformedTestClass())
.setMinApi(parameters.getApiLevel())
.addKeepMainRule(TestClass.class)
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.addKeepRules("-keepclassmembers class * { *** foo(...); }")
.run(parameters.getRuntime(), TestClass.class)
.assertSuccessWithOutput(EXPECTED);
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicHolderTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicHolderTest.java
index 8c1d8f1..2dde386 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicHolderTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/ConstantDynamicHolderTest.java
@@ -66,6 +66,9 @@
|| diagnostic instanceof ConstantDynamicDesugarDiagnostic)
? DiagnosticsLevel.WARNING
: level)
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics.assertWarningsMatch(
@@ -105,6 +108,9 @@
.addKeepMainRule(Main.class)
.allowDiagnosticWarningMessages()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics -> {
if (parameters.isDexRuntime()) {
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/SharedBootstrapMethodConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/SharedBootstrapMethodConstantDynamicTest.java
index 87f3382..88328c7 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/SharedBootstrapMethodConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/SharedBootstrapMethodConstantDynamicTest.java
@@ -90,6 +90,9 @@
|| diagnostic instanceof UnsupportedFeatureDiagnostic)
? DiagnosticsLevel.WARNING
: level)
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics ->
diagnostics
@@ -121,6 +124,9 @@
|| diagnostic instanceof UnsupportedFeatureDiagnostic)
? DiagnosticsLevel.WARNING
: level)
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics -> {
diagnostics.assertOnlyWarnings();
@@ -167,6 +173,9 @@
.addKeepMainRule(MAIN_CLASS)
.allowDiagnosticMessages()
.mapUnsupportedFeaturesToWarnings()
+ // TODO(b/238175192): remove again when resolved
+ .addOptionsModification(
+ options -> options.enableUnrepresentableInDexInstructionRemoval = true)
.compileWithExpectedDiagnostics(
diagnostics -> {
diagnostics