Filter out lambdas with unexpected annotations.

Bug: 124105982, 118182891
Change-Id: I5df64173b254370c7730ec7d50ceb7490b0b9c64
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
index 66ae73a..8dedd18 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/LambdaMerger.java
@@ -154,7 +154,8 @@
             cls ->
                 cls.hasKotlinInfo()
                     && cls.getKotlinInfo().isSyntheticClass()
-                    && cls.getKotlinInfo().asSyntheticClass().isLambda())
+                    && cls.getKotlinInfo().asSyntheticClass().isLambda()
+                    && KotlinLambdaGroupIdFactory.hasValidAnnotations(kotlin, cls))
         .sorted((a, b) -> a.type.slowCompareTo(b.type)) // Ensure stable ordering.
         .forEachOrdered(
             lambda -> {
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
index 4b8290e..1c649d5 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/lambda/kotlin/KotlinLambdaGroupIdFactory.java
@@ -87,6 +87,21 @@
     return null;
   }
 
+  public static boolean hasValidAnnotations(Kotlin kotlin, DexClass lambda) {
+    if (!lambda.annotations.isEmpty()) {
+      for (DexAnnotation annotation : lambda.annotations.annotations) {
+        if (DexAnnotation.isSignatureAnnotation(annotation, kotlin.factory)) {
+          continue;
+        }
+        if (annotation.annotation.type == kotlin.metadata.kotlinMetadataType) {
+          continue;
+        }
+        return false;
+      }
+    }
+    return true;
+  }
+
   String validateAnnotations(Kotlin kotlin, DexClass lambda) throws LambdaStructureError {
     String signature = null;
     if (!lambda.annotations.isEmpty()) {
@@ -103,10 +118,12 @@
           continue;
         }
 
+        assert !hasValidAnnotations(kotlin, lambda);
         throw new LambdaStructureError(
             "unexpected annotation: " + annotation.annotation.type.toSourceString());
       }
     }
+    assert hasValidAnnotations(kotlin, lambda);
     return signature;
   }