Version 2.1.63 Cherry-pick: Ensure that inlined target is accessible CL: https://r8-review.googlesource.com/52230/ Bug: 159554204 Bug: 161087321 Change-Id: I1bd17aa6740141d722fe10971508aa464371d9fd
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java index 317ddf9..69ccb47 100644 --- a/src/main/java/com/android/tools/r8/Version.java +++ b/src/main/java/com/android/tools/r8/Version.java
@@ -11,7 +11,7 @@ // This field is accessed from release scripts using simple pattern matching. // Therefore, changing this field could break our release scripts. - public static final String LABEL = "2.1.62"; + public static final String LABEL = "2.1.63"; private Version() { }
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java index 8f07681..40942d4 100644 --- a/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java +++ b/src/main/java/com/android/tools/r8/ir/optimize/Inliner.java
@@ -8,6 +8,7 @@ import com.android.tools.r8.androidapi.AvailableApiExceptions; import com.android.tools.r8.errors.Unreachable; +import com.android.tools.r8.graph.AccessControl; import com.android.tools.r8.graph.AccessFlags; import com.android.tools.r8.graph.AppInfoWithClassHierarchy; import com.android.tools.r8.graph.AppView; @@ -64,6 +65,7 @@ import com.android.tools.r8.utils.InternalOptions; import com.android.tools.r8.utils.IteratorUtils; import com.android.tools.r8.utils.ListUtils; +import com.android.tools.r8.utils.OptionalBool; import com.android.tools.r8.utils.SetUtils; import com.android.tools.r8.utils.Timing; import com.android.tools.r8.utils.collections.ProgramMethodSet; @@ -975,6 +977,16 @@ continue; } + OptionalBool methodAccessible = + AccessControl.isMethodAccessible( + singleTarget.getDefinition(), + singleTarget.getHolder().asDexClass(), + context.getHolder(), + appView.withClassHierarchy().appInfo()); + if (!methodAccessible.isTrue()) { + continue; + } + DexEncodedMethod singleTargetMethod = singleTarget.getDefinition(); WhyAreYouNotInliningReporter whyAreYouNotInliningReporter = oracle.isForcedInliningOracle()
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java index aa207e8..abd24cb 100644 --- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java +++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/InlineCandidateProcessor.java
@@ -10,6 +10,7 @@ import com.android.tools.r8.errors.InternalCompilerError; import com.android.tools.r8.errors.Unreachable; +import com.android.tools.r8.graph.AccessControl; import com.android.tools.r8.graph.AppView; import com.android.tools.r8.graph.DexClass; import com.android.tools.r8.graph.DexEncodedField; @@ -59,6 +60,7 @@ import com.android.tools.r8.ir.optimize.inliner.NopWhyAreYouNotInliningReporter; import com.android.tools.r8.kotlin.KotlinClassLevelInfo; import com.android.tools.r8.shaking.AppInfoWithLiveness; +import com.android.tools.r8.utils.OptionalBool; import com.android.tools.r8.utils.Pair; import com.android.tools.r8.utils.StringUtils; import com.android.tools.r8.utils.Timing; @@ -309,6 +311,13 @@ return user; // Not eligible. } + OptionalBool methodAccessible = + AccessControl.isMethodAccessible( + singleTargetMethod, singleTarget.getHolder().asDexClass(), method, appView); + + if (!methodAccessible.isTrue()) { + return user; // Not eligible. + } // Eligible constructor call (for new instance roots only). if (user.isInvokeDirect()) { InvokeDirect invoke = user.asInvokeDirect();