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(),