Disable reading of stack frames if emitting DEX
Bug: 173678465
Change-Id: I0b4f9351bf31e104cb81f1311e7b7fa67572694c
diff --git a/src/main/java/com/android/tools/r8/D8Command.java b/src/main/java/com/android/tools/r8/D8Command.java
index 84bc9b3..4559efe 100644
--- a/src/main/java/com/android/tools/r8/D8Command.java
+++ b/src/main/java/com/android/tools/r8/D8Command.java
@@ -377,7 +377,7 @@
assert !internal.debug;
internal.debug = getMode() == CompilationMode.DEBUG;
internal.programConsumer = getProgramConsumer();
- if (internal.programConsumer instanceof ClassFileConsumer) {
+ if (internal.isGeneratingClassFiles()) {
internal.cfToCfDesugar = true;
}
internal.mainDexListConsumer = getMainDexListConsumer();
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 05dffcf..943c978 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -678,7 +678,7 @@
public boolean verifyFrames(
DexEncodedMethod method, AppView<?> appView, Origin origin, boolean applyProtoTypeChanges) {
- if (!appView.options().testing.readInputStackMaps
+ if (!appView.options().canUseInputStackMaps()
|| appView.options().testing.disableStackMapVerification) {
stackMapStatus = StackMapStatus.INVALID_OR_NOT_PRESENT;
return true;
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 e0aace9..55ec1e3 100644
--- a/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/LazyCfCode.java
@@ -993,7 +993,7 @@
JarApplicationReader application, boolean reachabilitySensitive) {
// TODO(b/166841731): We should compute our own from the compressed format.
int parsingOptions =
- application.options.testing.readInputStackMaps
+ application.options.canUseInputStackMaps()
? ClassReader.EXPAND_FRAMES
: ClassReader.SKIP_FRAMES;
ProguardConfiguration configuration = application.options.getProguardConfiguration();
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 dd42c7b..6368a32 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -559,6 +559,10 @@
|| getProguardConfiguration().getKeepAttributes().innerClasses;
}
+ public boolean canUseInputStackMaps() {
+ return testing.readInputStackMaps ? testing.readInputStackMaps : isGeneratingClassFiles();
+ }
+
public boolean printCfg = false;
public String printCfgFile;
public boolean ignoreMissingClasses = false;
diff --git a/src/test/java/com/android/tools/r8/cf/stackmap/StackMapVerificationNoFrameForHandlerTest.java b/src/test/java/com/android/tools/r8/cf/stackmap/StackMapVerificationNoFrameForHandlerTest.java
index 625a3dc..7e8c85c 100644
--- a/src/test/java/com/android/tools/r8/cf/stackmap/StackMapVerificationNoFrameForHandlerTest.java
+++ b/src/test/java/com/android/tools/r8/cf/stackmap/StackMapVerificationNoFrameForHandlerTest.java
@@ -76,6 +76,7 @@
: transformer(MainDump.dump(), Reference.classFromClass(Main.class))
.stripFrames("main")
.transform())
+ .addOptionsModification(options -> options.testing.readInputStackMaps = true)
.setMinApi(parameters.getApiLevel())
.compileWithExpectedDiagnostics(this::verifyWarningsRegardingStackMap)
.run(parameters.getRuntime(), Main.class)
@@ -94,6 +95,7 @@
.addKeepMainRule(Main.class)
.setMinApi(parameters.getApiLevel())
.allowDiagnosticWarningMessages(!includeFrameInHandler)
+ .addOptionsModification(options -> options.testing.readInputStackMaps = true)
.compileWithExpectedDiagnostics(this::verifyWarningsRegardingStackMap)
.run(parameters.getRuntime(), Main.class)
.assertSuccessWithOutputLines(EXPECTED_OUTPUT);
diff --git a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
index 164259f..87e0e89 100644
--- a/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
+++ b/src/test/java/com/android/tools/r8/cfmethodgeneration/MethodGenerationBase.java
@@ -94,6 +94,7 @@
private void readMethodTemplatesInto(CfCodePrinter codePrinter) throws IOException {
InternalOptions options = new InternalOptions();
+ options.testing.readInputStackMaps = true;
JarClassFileReader reader =
new JarClassFileReader(
new JarApplicationReader(options),