Prune keep info before rewriting with lens in horizontal merger
Bug: b/226414333
Change-Id: Id6f8671b3dbac5ff7704f3fb079223d304a8d11c
diff --git a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
index a3df5dd..6671b6a 100644
--- a/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/horizontalclassmerging/HorizontalClassMerger.java
@@ -19,6 +19,7 @@
import com.android.tools.r8.ir.code.Invoke.Type;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
import com.android.tools.r8.shaking.FieldAccessInfoCollectionModifier;
+import com.android.tools.r8.shaking.KeepInfoCollection;
import com.android.tools.r8.shaking.RuntimeTypeCheckInfo;
import com.android.tools.r8.synthesis.SyntheticItems;
import com.android.tools.r8.utils.InternalOptions.HorizontalClassMergerOptions;
@@ -153,12 +154,15 @@
// Must rewrite AppInfoWithLiveness before pruning the merged classes, to ensure that allocation
// sites, fields accesses, etc. are correctly transferred to the target classes.
DexApplication newApplication = getNewApplication(mergedClasses);
- if (appView.hasClassHierarchy()) {
+ if (appView.enableWholeProgramOptimizations()) {
+ // Prune keep info.
+ KeepInfoCollection keepInfo = appView.getKeepInfo();
+ keepInfo.mutate(mutator -> mutator.removeKeepInfoForMergedClasses(prunedItems));
+ assert appView.hasClassHierarchy();
appView.rewriteWithLensAndApplication(
horizontalClassMergerGraphLens, newApplication.toDirect());
} else {
assert mode.isFinal();
- assert !appView.enableWholeProgramOptimizations();
SyntheticItems syntheticItems = appView.appInfo().getSyntheticItems();
assert !syntheticItems.hasPendingSyntheticClasses();
appView