Raise an internal error if force inlining may not happen.
Bug: 74189420
Change-Id: I865a36fcc91968bb30548e692e4cb50f439e6c95
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 39f9f90..357de74 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -24,6 +24,7 @@
import com.android.tools.r8.dex.IndexedItemCollection;
import com.android.tools.r8.dex.JumboStringRewriter;
import com.android.tools.r8.dex.MixedSectionCollection;
+import com.android.tools.r8.errors.InternalCompilerError;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.AppInfo.ResolutionResult;
import com.android.tools.r8.graph.ParameterUsagesInfo.ParameterUsage;
@@ -266,7 +267,11 @@
}
if (inliningReason == Reason.FORCE) {
// Make sure we would be able to inline this normally.
- assert isInliningCandidate(containerType, Reason.SIMPLE, appInfo);
+ if (!isInliningCandidate(containerType, Reason.SIMPLE, appInfo)) {
+ // If not, raise a flag, because some optimizations that depend on force inlining would
+ // silently produce an invalid code, which is worse than an internal error.
+ throw new InternalCompilerError("FORCE inlining on non-inlinable: " + toSourceString());
+ }
return true;
}
// TODO(b/111080693): inlining candidate should satisfy all states if multiple states are there.