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;
     }