Fix NPE when compiling libcore
Bug: b/372460149
Change-Id: I6ddd541ff436bcea65fbbac7fdf088792f2ef8b2
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
index 6e1643e..71b7edb 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/classinliner/analysis/TransferFunction.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.ir.optimize.classinliner.analysis;
+import static com.android.tools.r8.graph.DexProgramClass.asProgramClassOrNull;
import static com.android.tools.r8.ir.code.Opcodes.ASSUME;
import static com.android.tools.r8.ir.code.Opcodes.CHECK_CAST;
import static com.android.tools.r8.ir.code.Opcodes.IF;
@@ -394,21 +395,21 @@
: isMaybeEligibleForClassInlining(clazz.asClasspathOrLibraryClass());
}
- @SuppressWarnings("ReferenceEquality")
private boolean isMaybeEligibleForClassInlining(DexProgramClass clazz) {
// We can only class inline parameters that does not inherit from other classpath or library
// classes than java.lang.Object.
- DexType superType = clazz.getSuperType();
- do {
- DexClass superClass = appView.definitionFor(superType);
+ while (clazz.hasSuperType()) {
+ DexType superType = clazz.getSuperType();
+ if (superType.isIdenticalTo(dexItemFactory.objectType)) {
+ break;
+ }
+ DexProgramClass superClass = asProgramClassOrNull(appView.definitionFor(superType));
if (superClass == null) {
return false;
}
- if (!superClass.isProgramClass()) {
- return superClass.getType() == dexItemFactory.objectType;
- }
- superType = superClass.getSuperType();
- } while (true);
+ clazz = superClass;
+ }
+ return true;
}
@SuppressWarnings("ReferenceEquality")