Set that publicized private methods not override library methods
Otherwise the caching will not consistent with computing
lookupSingleVirtualTarget.
Bug: 150478845
Bug: 150589374
Change-Id: Ie59c8eef58cb32c7b3c6b952d635c370b97f0d0b
diff --git a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
index 317cb3b..b319c6d 100644
--- a/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
+++ b/src/main/java/com/android/tools/r8/optimize/ClassAndMemberPublicizer.java
@@ -18,6 +18,7 @@
import com.android.tools.r8.ir.optimize.MethodPoolCollection;
import com.android.tools.r8.optimize.PublicizerLense.PublicizedLenseBuilder;
import com.android.tools.r8.shaking.AppInfoWithLiveness;
+import com.android.tools.r8.utils.OptionalBool;
import com.android.tools.r8.utils.Timing;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -110,6 +111,8 @@
return false;
}
if (!accessFlags.isPrivate() || appView.dexItemFactory().isConstructor(encodedMethod.method)) {
+ // TODO(b/150589374): This should check for dispatch targets or just abandon in
+ // package-private.
accessFlags.promoteToPublic();
return false;
}
@@ -142,6 +145,7 @@
// Although the current method became public, it surely has the single virtual target.
encodedMethod.method.setSingleVirtualMethodCache(
encodedMethod.method.holder, encodedMethod);
+ encodedMethod.setLibraryMethodOverride(OptionalBool.FALSE);
return true;
}