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