Only assert puts to final fields outside initializers when testing
Fixed: 187905573
Change-Id: I791496a3dee9cff1fb7c017b49d06fd88ad4bb58
diff --git a/src/main/java/com/android/tools/r8/graph/AppView.java b/src/main/java/com/android/tools/r8/graph/AppView.java
index 2067ad6..bf21997 100644
--- a/src/main/java/com/android/tools/r8/graph/AppView.java
+++ b/src/main/java/com/android/tools/r8/graph/AppView.java
@@ -49,6 +49,7 @@
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.function.Supplier;
public class AppView<T extends AppInfo> implements DexDefinitionSupplier, LibraryModeledPredicate {
@@ -729,4 +730,8 @@
assert alreadyLibraryDesugared != null;
return alreadyLibraryDesugared.contains(clazz.getType());
}
+
+ public boolean checkForTesting(Supplier<Boolean> test) {
+ return testing().enableTestAssertions ? test.get() : true;
+ }
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
index 989c188..7092012 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/RedundantFieldLoadElimination.java
@@ -244,8 +244,10 @@
killNonFinalActiveFields(staticPut);
ExistingValue value = new ExistingValue(staticPut.value());
if (isFinal(field)) {
- assert !field.getDefinition().isFinal()
- || method.getDefinition().isClassInitializer();
+ assert appView.checkForTesting(
+ () ->
+ !field.getDefinition().isFinal()
+ || method.getDefinition().isClassInitializer());
activeState.putFinalStaticField(reference, value);
} else {
activeState.putNonFinalStaticField(reference, value);