Version 1.4.43
Cherry pick: Disable assertion in vertical class merger
CL: https://r8-review.googlesource.com/c/r8/+/33927
Bug: 124476441
Change-Id: Ia10053c85b7b46de7f45c36baca172fa6d018e31
diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 0d8b672..c9938d3 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 = "1.4.42";
+ public static final String LABEL = "1.4.43";
private Version() {
}
diff --git a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
index b68bf80..acfc42f 100644
--- a/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
+++ b/src/main/java/com/android/tools/r8/shaking/VerticalClassMerger.java
@@ -1223,8 +1223,19 @@
assert actual.isVirtualMethod() == method.isVirtualMethod();
return actual;
}
- // We will keep the method, so the class better be abstract if there is no implementation.
- assert !method.accessFlags.isAbstract() || target.accessFlags.isAbstract();
+ // The method is not actually overridden. This means that we will move `method` to the
+ // subtype. If `method` is abstract, then so should the subtype be.
+ if (Log.ENABLED) {
+ if (method.accessFlags.isAbstract() && !target.accessFlags.isAbstract()) {
+ Log.warn(
+ VerticalClassMerger.class,
+ "The non-abstract type `"
+ + target.type.toSourceString()
+ + "` does not implement the method `"
+ + method.method.toSourceString()
+ + "`.");
+ }
+ }
return null;
}