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.