Always mark synthesized interface bridges as pinned
Bug: 150443272, 150442580
Change-Id: I34b23745ac87267706c55ea0c6f4c74ea2b27590
diff --git a/src/main/java/com/android/tools/r8/R8.java b/src/main/java/com/android/tools/r8/R8.java
index 2086f5e..c2a890e 100644
--- a/src/main/java/com/android/tools/r8/R8.java
+++ b/src/main/java/com/android/tools/r8/R8.java
@@ -336,6 +336,7 @@
assert appView.rootSet().verifyKeptFieldsAreAccessedAndLive(appViewWithLiveness.appInfo());
assert appView.rootSet().verifyKeptMethodsAreTargetedAndLive(appViewWithLiveness.appInfo());
assert appView.rootSet().verifyKeptTypesAreLive(appViewWithLiveness.appInfo());
+ assert appView.rootSet().verifyKeptItemsAreKept(appView.appInfo().app(), appView.appInfo());
appView.rootSet().checkAllRulesAreUsed(options);
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index 36afff6..582ee40 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -2471,11 +2471,13 @@
assert fieldAccessInfoCollection.verifyMappingIsOneToOne();
for (ProgramMethod bridge : syntheticInterfaceMethodBridges.values()) {
- appView.appInfo().invalidateTypeCacheFor(bridge.getHolder().type);
- bridge.getHolder().appendVirtualMethod(bridge.getMethod());
- targetedMethods.add(bridge.getMethod(), graphReporter.fakeReportShouldNotBeUsed());
- liveMethods.add(
- bridge.getHolder(), bridge.getMethod(), graphReporter.fakeReportShouldNotBeUsed());
+ DexProgramClass holder = bridge.getHolder();
+ DexEncodedMethod method = bridge.getMethod();
+ appView.appInfo().invalidateTypeCacheFor(holder.type);
+ holder.appendVirtualMethod(method);
+ targetedMethods.add(method, graphReporter.fakeReportShouldNotBeUsed());
+ liveMethods.add(holder, method, graphReporter.fakeReportShouldNotBeUsed());
+ pinnedItems.add(method.method);
}
// Ensure references from various root set collections.