Bail-out for isSubtypes on array types.
Bug: 147658738
Change-Id: Id157245704c4c34b841229535c8a4069ee7c95f3
diff --git a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
index de380e8..4344794 100644
--- a/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
+++ b/src/main/java/com/android/tools/r8/graph/AppInfoWithClassHierarchy.java
@@ -36,16 +36,12 @@
public boolean isSubtype(DexType subtype, DexType supertype) {
assert subtype != null;
assert supertype != null;
- assert subtype.isClassType();
- assert supertype.isClassType();
return subtype == supertype || isStrictSubtypeOf(subtype, supertype);
}
public boolean isStrictSubtypeOf(DexType subtype, DexType supertype) {
assert subtype != null;
assert supertype != null;
- assert subtype.isClassType();
- assert supertype.isClassType();
if (subtype == supertype) {
return false;
}
@@ -56,6 +52,10 @@
if (supertype == dexItemFactory().objectType) {
return true;
}
+ // TODO(b/147658738): Clean up the code to not call on non-class types or fix this.
+ if (!subtype.isClassType() || !supertype.isClassType()) {
+ return false;
+ }
Deque<DexType> workList = new ArrayDeque<>();
workList.addFirst(subtype);
while (!workList.isEmpty()) {