Check visibility of a single target before checking side-effects.
Change-Id: Ic2ee8f8708f596088fd88febc3924804af9e5378
diff --git a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
index acfb6da..3bc7380 100644
--- a/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
+++ b/src/main/java/com/android/tools/r8/ir/code/InvokeVirtual.java
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.ir.code;
+import static com.android.tools.r8.optimize.MemberRebindingAnalysis.isMemberVisibleFromOriginalContext;
+
import com.android.tools.r8.cf.code.CfInvoke;
import com.android.tools.r8.code.InvokeVirtualRange;
import com.android.tools.r8.graph.AppInfoWithSubtyping;
@@ -148,6 +150,12 @@
return true;
}
+ // Verify that the target method is accessible in the current context.
+ if (!isMemberVisibleFromOriginalContext(
+ appView, context, target.method.holder, target.accessFlags)) {
+ return true;
+ }
+
// Verify that the target method does not have side-effects.
boolean targetMayHaveSideEffects;
if (appViewWithLiveness.appInfo().noSideEffects.containsKey(target.method)) {