Verify vertically merged types are pruned by tree shaking
Bug: 131114814
Change-Id: Iab741de15b18784c18e07d6d4aa90ac12105ed49
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 1649c0d..2924ba8 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -627,6 +627,9 @@
application,
CollectionUtils.mergeSets(prunedTypes, pruner.getRemovedClasses())));
+ assert appView.verticallyMergedClasses() == null
+ || appView.verticallyMergedClasses().verifyAllSourcesPruned(appViewWithLiveness);
+
processWhyAreYouKeepingAndCheckDiscarded(
appView.rootSet(),
() -> appView.appInfo().app().classesWithDeterministicOrder(),
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index e470a9b..2d3a09f 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -115,6 +115,15 @@
public boolean hasBeenMergedIntoSubtype(DexType type) {
return mergedClasses.containsKey(type);
}
+
+ public boolean verifyAllSourcesPruned(AppView<AppInfoWithLiveness> appView) {
+ for (List<DexType> sourcesForTarget : sources.values()) {
+ for (DexType source : sourcesForTarget) {
+ assert appView.appInfo().wasPruned(source);
+ }
+ }
+ return true;
+ }
}
private enum AbortReason {