Proguard rules should take precedence in member value propagation
Bug: 134709054
Change-Id: I76d6fc0073ec5342d207f83784be1a8bd639834a
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
index 4596f3b..b9d0990 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/MemberValuePropagation.java
@@ -344,6 +344,14 @@
return;
}
+ // Check if there is a Proguard configuration rule that specifies the value of the field.
+ ProguardMemberRuleLookup lookup = lookupMemberRule(target);
+ if (lookup != null
+ && tryConstantReplacementFromProguard(
+ code, affectedValues, blocks, iterator, current, lookup)) {
+ return;
+ }
+
// Check if a this value is known const.
if (!appView.appInfo().isPinned(target.field)) {
ConstInstruction replacement = target.valueAsConstInstruction(code, current.dest(), appView);
@@ -358,12 +366,6 @@
}
}
- ProguardMemberRuleLookup lookup = lookupMemberRule(target);
- if (lookup != null
- && tryConstantReplacementFromProguard(
- code, affectedValues, blocks, iterator, current, lookup)) {
- return;
- }
if (current.dest() != null) {
// In case the class holder of this static field satisfying following criteria:
// -- cannot trigger other static initializer except for its own
diff --git a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
index 1197a4a..87dc516 100644
--- a/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
+++ b/src/main/java/com/android/tools/r8/naming/IdentifierNameStringMarker.java
@@ -152,7 +152,6 @@
iterator.next();
}
if (instruction.isStaticPut()) {
- StaticPut staticPut = instruction.asStaticPut();
iterator.replaceCurrentInstruction(new StaticPut(newIn, field));
} else {
assert instruction.isInstancePut();