Version 1.4.41
Cherry pick: Force compiling without locals information for release
mode
CL: https://r8-review.googlesource.com/c/r8/+/34000
Bug: 123850906
Change-Id: I029cc0d67f3161f25eeece146bf1af00a0b06a2e
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index b667914..27a34f7 100644
--- a/src/main/java/com/android/tools/r8/Version.java
+++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@
// This field is accessed from release scripts using simple pattern matching.
// Therefore, changing this field could break our release scripts.
- public static final String LABEL = "1.4.40";
+ public static final String LABEL = "1.4.41";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index c203270..64919d4 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -125,12 +125,8 @@
GraphLense graphLense,
InternalOptions options,
Origin origin) {
- assert getOwner() == encodedMethod;
- triggerDelayedParsingIfNeccessary();
- return options.debug || encodedMethod.getOptimizationInfo().isReachabilitySensitive()
- ? internalBuildWithLocals(
- encodedMethod, encodedMethod, appInfo, graphLense, options, null, null)
- : internalBuild(encodedMethod, encodedMethod, appInfo, graphLense, options, null, null);
+ return internalBuildPossiblyWithLocals(
+ encodedMethod, encodedMethod, appInfo, graphLense, options, null, null);
}
@Override
@@ -143,14 +139,30 @@
ValueNumberGenerator generator,
Position callerPosition,
Origin origin) {
- assert getOwner() == encodedMethod;
assert generator != null;
+ return internalBuildPossiblyWithLocals(
+ context, encodedMethod, appInfo, graphLense, options, generator, callerPosition);
+ }
+
+ private IRCode internalBuildPossiblyWithLocals(
+ DexEncodedMethod context,
+ DexEncodedMethod encodedMethod,
+ AppInfo appInfo,
+ GraphLense graphLense,
+ InternalOptions options,
+ ValueNumberGenerator generator,
+ Position callerPosition) {
+ assert getOwner() == encodedMethod;
triggerDelayedParsingIfNeccessary();
- return options.debug || encodedMethod.getOptimizationInfo().isReachabilitySensitive()
- ? internalBuildWithLocals(
- context, encodedMethod, appInfo, graphLense, options, generator, callerPosition)
- : internalBuild(
- context, encodedMethod, appInfo, graphLense, options, generator, callerPosition);
+ if (!keepLocals(encodedMethod, options)) {
+ // We strip locals here because we will not be able to recover from invalid info.
+ node.localVariables.clear();
+ return internalBuild(
+ context, encodedMethod, appInfo, graphLense, options, generator, callerPosition);
+ } else {
+ return internalBuildWithLocals(
+ context, encodedMethod, appInfo, graphLense, options, generator, callerPosition);
+ }
}
private IRCode internalBuildWithLocals(
@@ -176,14 +188,10 @@
if (options.testing.noLocalsTableOnInput) {
return false;
}
- if (options.debug) {
+ if (options.debug || encodedMethod.getOptimizationInfo().isReachabilitySensitive()) {
return true;
}
- if (options.getProguardConfiguration() != null
- && options.getProguardConfiguration().getKeepAttributes().localVariableTable) {
- return true;
- }
- return encodedMethod.getOptimizationInfo().isReachabilitySensitive();
+ return false;
}
private IRCode internalBuild(
@@ -194,9 +202,7 @@
InternalOptions options,
ValueNumberGenerator generator,
Position callerPosition) {
- if (!keepLocals(encodedMethod, options)) {
- node.localVariables.clear();
- }
+ assert node.localVariables.isEmpty() || keepLocals(encodedMethod, options);
JarSourceCode source =
new JarSourceCode(
method.getHolder(),