diff --git a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
index 2ffe096..669e86b 100644
--- a/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
+++ b/src/main/java/com/android/tools/r8/graph/ObjectAllocationInfoCollectionImpl.java
@@ -122,6 +122,16 @@
     return clazz.isInterface() && interfacesWithUnknownSubtypeHierarchy.contains(clazz);
   }
 
+  /**
+   * Returns true if the type is an annotation interface which (by design) has an unknown subtype
+   * hierarchy.
+   */
+  public boolean isAnnotationInterfaceWithUnknownSubtypeHierarchy(DexProgramClass iface) {
+    return iface.isInterface()
+        && iface.isAnnotation()
+        && annotationsWithUnknownSubtypeHierarchy.contains(iface);
+  }
+
   /** Returns true if the type is an immediate interface of an instantiated lambda. */
   @Override
   public boolean isImmediateInterfaceOfInstantiatedLambda(DexProgramClass iface) {
@@ -522,6 +532,18 @@
         assert !interfacesWithUnknownSubtypeHierarchy.contains(rewrittenClass);
         interfacesWithUnknownSubtypeHierarchy.add(rewrittenClass);
       }
+      for (DexProgramClass abstractType :
+          objectAllocationInfos.annotationsWithUnknownSubtypeHierarchy) {
+        DexType type = lens.lookupType(abstractType.type, appliedLens);
+        if (type.isPrimitiveType()) {
+          assert false;
+          continue;
+        }
+        DexProgramClass rewrittenClass = asProgramClassOrNull(definitions.definitionFor(type));
+        assert rewrittenClass != null;
+        assert !annotationsWithUnknownSubtypeHierarchy.contains(rewrittenClass);
+        annotationsWithUnknownSubtypeHierarchy.add(rewrittenClass);
+      }
       LensCodeRewriterUtils rewriter = new LensCodeRewriterUtils(definitions, lens, appliedLens);
       objectAllocationInfos.instantiatedLambdas.forEach(
           (iface, lambdas) -> {
diff --git a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
index 022be10..cbba232 100644
--- a/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
+++ b/src/main/java/com/android/tools/r8/shaking/AppInfoWithLiveness.java
@@ -1156,8 +1156,10 @@
     // TODO(b/148769279): Disable lookup single target on lambda's for now.
     if (resolvedHolder.isInterface()
         && resolvedHolder.isProgramClass()
-        && objectAllocationInfoCollection.isImmediateInterfaceOfInstantiatedLambda(
-            resolvedHolder.asProgramClass())) {
+        && (objectAllocationInfoCollection.isImmediateInterfaceOfInstantiatedLambda(
+                resolvedHolder.asProgramClass())
+            || objectAllocationInfoCollection.isAnnotationInterfaceWithUnknownSubtypeHierarchy(
+                resolvedHolder.asProgramClass()))) {
       singleTargetLookupCache.addNoSingleTargetToCache(refinedReceiverType, method);
       return null;
     }
diff --git a/src/test/java/com/android/tools/r8/optimize/ReproduceKT72888Test.java b/src/test/java/com/android/tools/r8/optimize/AnnotationImplementedAndInstantiatedInProgramTest.java
similarity index 93%
rename from src/test/java/com/android/tools/r8/optimize/ReproduceKT72888Test.java
rename to src/test/java/com/android/tools/r8/optimize/AnnotationImplementedAndInstantiatedInProgramTest.java
index a61ef15..83e0029 100644
--- a/src/test/java/com/android/tools/r8/optimize/ReproduceKT72888Test.java
+++ b/src/test/java/com/android/tools/r8/optimize/AnnotationImplementedAndInstantiatedInProgramTest.java
@@ -15,8 +15,9 @@
 import org.junit.runners.Parameterized.Parameter;
 import org.junit.runners.Parameterized.Parameters;
 
+// This is a reproduction of b/378473616 (extracted from KT-72888)
 @RunWith(Parameterized.class)
-public class ReproduceKT72888Test extends TestBase {
+public class AnnotationImplementedAndInstantiatedInProgramTest extends TestBase {
 
   @Parameter(0)
   public TestParameters parameters;
@@ -57,7 +58,7 @@
         .addKeepRuntimeVisibleAnnotations()
         .setMinApi(parameters)
         .run(parameters.getRuntime(), TestClass.class)
-        .assertFailureWithErrorThatThrows(ClassCastException.class);
+        .assertSuccessWithOutput(EXPECTED_OUTPUT);
   }
 
   @Retention(RetentionPolicy.RUNTIME)
