diff --git a/src/main/java/com/android/tools/r8/graph/DexType.java b/src/main/java/com/android/tools/r8/graph/DexType.java
index 9cdede4..936f967 100644
--- a/src/main/java/com/android/tools/r8/graph/DexType.java
+++ b/src/main/java/com/android/tools/r8/graph/DexType.java
@@ -10,6 +10,7 @@
 
 import com.android.tools.r8.dex.IndexedItemCollection;
 import com.android.tools.r8.errors.Unreachable;
+import com.android.tools.r8.logging.Log;
 import com.android.tools.r8.naming.NamingLens;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.InternalOptions.OutlineOptions;
@@ -166,6 +167,13 @@
   }
 
   public boolean isStrictSubtypeOf(DexType other, AppInfo appInfo) {
+    // For all erroneous cases, saying `no`---not a strict subtype---is conservative.
+    return isStrictSubtypeOf(other, appInfo, false);
+  }
+
+  // Depending on optimizations, conservative answer of subtype relation may vary.
+  // Pass different `orElse` in that case.
+  public boolean isStrictSubtypeOf(DexType other, AppInfo appInfo, boolean orElse) {
     if (this == other) {
       return false;
     }
@@ -184,7 +192,7 @@
       return other.directSubtypes.stream().anyMatch(subtype -> this.isSubtypeOf(subtype,
           appInfo));
     }
-    return isSubtypeOfClass(other, appInfo);
+    return isSubtypeOfClass(other, appInfo, orElse);
   }
 
   private boolean isInterfaceSubtypeOf(DexType candidate, DexType other, AppInfo appInfo) {
@@ -204,15 +212,22 @@
     return false;
   }
 
-  private boolean isSubtypeOfClass(DexType other, AppInfo appInfo) {
+  private boolean isSubtypeOfClass(DexType other, AppInfo appInfo, boolean orElse) {
     DexType self = this;
     if (other.hierarchyLevel == UNKNOWN_LEVEL) {
-      // We have no definition for this class, hence it is not part of the
-      // hierarchy.
-      return false;
+      // We have no definition for this class, hence it is not part of the hierarchy.
+      return orElse;
     }
     while (other.hierarchyLevel < self.hierarchyLevel) {
       DexClass holder = appInfo.definitionFor(self);
+      // TODO(b/113374256): even synthesized class should be available ATM.
+      if (holder == null) {
+        assert self.isD8R8SynthesizedClassType();
+        if (Log.ENABLED) {
+          Log.debug(getClass(), "%s is not in AppInfo yet.", self.toSourceString());
+        }
+        return orElse;
+      }
       assert holder != null && !holder.isInterface();
       self = holder.superType;
     }
diff --git a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java b/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java
index 31db483..343dfdf 100644
--- a/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/KotlinLambdaMergingWithReprocessingTest.java
@@ -5,7 +5,6 @@
 
 import com.android.tools.r8.utils.InternalOptions;
 import java.util.function.Consumer;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class KotlinLambdaMergingWithReprocessingTest extends AbstractR8KotlinTestBase {
@@ -18,7 +17,6 @@
       o.enableLambdaMerging = true;
     };
 
-  @Ignore("b/123737770")
   @Test
   public void testMergingKStyleLambdasAndReprocessing() throws Exception {
     final String mainClassName = "reprocess_merged_lambdas_kstyle.MainKt";
