diff --git a/src/main/java/com/android/tools/r8/Version.java b/src/main/java/com/android/tools/r8/Version.java
index 14b53f4..76c37ab 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.5.51";
+  public static final String LABEL = "1.5.52";
 
   private Version() {
   }
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 7f7643b..568a8cb 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
@@ -4,7 +4,6 @@
 
 package com.android.tools.r8.ir.optimize.lambda.kotlin;
 
-import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.graph.AccessFlags;
 import com.android.tools.r8.graph.DexAnnotation;
 import com.android.tools.r8.graph.DexClass;
@@ -175,7 +174,6 @@
       } else if (method.isStatic()) {
         throw new LambdaStructureError(
             "unexpected static method: " + method.method.toSourceString());
-
       } else if (method.isInstanceInitializer()) {
         // Lambda class is expected to have one constructor
         // with parameters matching capture signature.
@@ -197,8 +195,13 @@
             method.accessFlags, CONSTRUCTOR_FLAGS, CONSTRUCTOR_FLAGS_RELAXED);
         checkDirectMethodAnnotations(method);
 
+      } else if (method.isPrivateMethod()) {
+        // TODO(b/135975229)
+        throw new LambdaStructureError("private method: " + method.method.toSourceString());
       } else {
-        throw new Unreachable();
+        assert false;
+        throw new LambdaStructureError(
+            "unexpected method encountered: " + method.method.toSourceString());
       }
     }
   }
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$b.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$b.java
new file mode 100644
index 0000000..ef6c780
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$b.java
@@ -0,0 +1,12 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public class EventPublisher$b {
+
+  public final Object apply(java.lang.Object foo) {
+    return foo;
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
new file mode 100644
index 0000000..df725af
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisher$bDump.java
@@ -0,0 +1,149 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+import org.objectweb.asm.AnnotationVisitor;
+import org.objectweb.asm.ClassWriter;
+import org.objectweb.asm.FieldVisitor;
+import org.objectweb.asm.Label;
+import org.objectweb.asm.MethodVisitor;
+import org.objectweb.asm.Opcodes;
+
+public class EventPublisher$bDump implements Opcodes {
+
+  public static byte[] dump() {
+
+    ClassWriter classWriter = new ClassWriter(0);
+    FieldVisitor fieldVisitor;
+    MethodVisitor methodVisitor;
+    AnnotationVisitor annotationVisitor0;
+
+    classWriter.visit(
+        V1_6,
+        ACC_FINAL | ACC_SUPER,
+        "com/android/tools/r8/shaking/b134858535/EventPublisher$b",
+        null,
+        "java/lang/Object",
+        new String[] {"com/android/tools/r8/shaking/b134858535/Interface"});
+
+    classWriter.visitSource("SourceFile", null);
+
+    {
+      annotationVisitor0 = classWriter.visitAnnotation("Lkotlin/Metadata;", true);
+      annotationVisitor0.visit("mv", new int[] {1, 1, 15});
+      annotationVisitor0.visit("bv", new int[] {1, 0, 3});
+      annotationVisitor0.visit("k", new Integer(3));
+      {
+        AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d1");
+        annotationVisitor1.visit(
+            null,
+            "\u0000 \n"
+                + "\u0000\n"
+                + "\u0002\u0018\u0002\n"
+                + "\u0002\u0018\u0002\n"
+                + "\u0002\u0018\u0002\n"
+                + "\u0000\n"
+                + "\u0002\u0018\u0002\n"
+                + "\u0000\n"
+                + "\u0002\u0010 \n"
+                + "\u0002\u0018\u0002\n"
+                + "\u0000\u0010\u0000\u001a\u0096\u0001\u0012D\u0012B\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00030\u0003\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00050\u0005 \u0004* \u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00030\u0003\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00050\u0005\u0018\u00010\u00020\u0002"
+                + " \u0004*J\u0012D\u0012B\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00030\u0003\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00050\u0005 \u0004* \u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00030\u0003\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00050\u0005\u0018\u00010\u00020\u0002\u0018\u00010\u00010\u00012"
+                + " \u0010\u0006\u001a\u001c\u0012\n"
+                + "\u0012\u0008\u0012\u0004\u0012\u00020\u00030\u0007\u0012\u000c\u0012\n"
+                + " \u0004*\u0004\u0018\u00010\u00080\u00080\u0002H\n"
+                + "\u00a2\u0006\u0002\u0008\u0009");
+        annotationVisitor1.visitEnd();
+      }
+      {
+        AnnotationVisitor annotationVisitor1 = annotationVisitor0.visitArray("d2");
+        annotationVisitor1.visit(null, "<anonymous>");
+        annotationVisitor1.visit(null, "Lio/reactivex/Flowable;");
+        annotationVisitor1.visit(null, "Lkotlin/Pair;");
+        annotationVisitor1.visit(null, "Lcom/permutive/android/event/db/model/EventEntity;");
+        annotationVisitor1.visit(null, "kotlin.jvm.PlatformType");
+        annotationVisitor1.visit(
+            null, "Lcom/permutive/android/event/api/model/TrackBatchEventResponse;");
+        annotationVisitor1.visit(null, "<name for destructuring parameter 0>");
+        annotationVisitor1.visit(null, "");
+        annotationVisitor1.visit(null, "Lcom/permutive/android/config/api/model/SdkConfiguration;");
+        annotationVisitor1.visit(null, "apply");
+        annotationVisitor1.visitEnd();
+      }
+      annotationVisitor0.visitEnd();
+    }
+    classWriter.visitInnerClass(
+        "com/permutive/android/event/EventPublisher$b", null, null, ACC_FINAL | ACC_STATIC);
+
+    {
+      fieldVisitor =
+          classWriter.visitField(
+              ACC_FINAL | ACC_SYNTHETIC,
+              "a",
+              "Lcom/permutive/android/event/EventPublisher;",
+              null,
+              null);
+      fieldVisitor.visitEnd();
+    }
+    {
+      fieldVisitor =
+          classWriter.visitField(ACC_FINAL | ACC_SYNTHETIC, "b", "Ljava/util/Set;", null, null);
+      fieldVisitor.visitEnd();
+    }
+    {
+      methodVisitor =
+          classWriter.visitMethod(
+              ACC_PUBLIC | ACC_FINAL | ACC_SYNTHETIC,
+              "apply",
+              "(Ljava/lang/Object;)Ljava/lang/Object;",
+              null,
+              null);
+      methodVisitor.visitCode();
+      Label label0 = new Label();
+      methodVisitor.visitLabel(label0);
+      methodVisitor.visitLineNumber(28, label0);
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitVarInsn(ALOAD, 1);
+      methodVisitor.visitTypeInsn(CHECKCAST, "kotlin/Pair");
+      methodVisitor.visitMethodInsn(
+          INVOKESPECIAL,
+          "com/android/tools/r8/shaking/b134858535/EventPublisher$b",
+          "a",
+          "(Ljava/lang/Object;)Ljava/lang/Object;",
+          false);
+      methodVisitor.visitInsn(ARETURN);
+      methodVisitor.visitMaxs(2, 2);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor =
+          classWriter.visitMethod(
+              ACC_PRIVATE, "a", "(Ljava/lang/Object;)Ljava/lang/Object;", null, null);
+      methodVisitor.visitCode();
+      methodVisitor.visitVarInsn(ALOAD, 0);
+      methodVisitor.visitInsn(ARETURN);
+      methodVisitor.visitMaxs(4, 9);
+      methodVisitor.visitEnd();
+    }
+    {
+      methodVisitor = classWriter.visitMethod(0, "<init>", "()V", null, null);
+      methodVisitor.visitCode();
+      methodVisitor.visitInsn(RETURN);
+      methodVisitor.visitMaxs(2, 3);
+      methodVisitor.visitEnd();
+    }
+    classWriter.visitEnd();
+
+    return classWriter.toByteArray();
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
new file mode 100644
index 0000000..6d0d767
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/EventPublisherTest.java
@@ -0,0 +1,31 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import org.junit.Test;
+
+public class EventPublisherTest extends TestBase {
+
+  public static class Main {
+
+    public static void main(String[] args) {
+      new EventPublisher$b().apply("foo");
+    }
+  }
+
+  @Test
+  public void testPrivateMethodsInLambdaClass() throws CompilationFailedException {
+    testForR8(Backend.DEX)
+        .addProgramClasses(Main.class, Interface.class)
+        .addProgramClassFileData(EventPublisher$bDump.dump())
+        .addKeepClassRules(Interface.class)
+        .addKeepMainRule(Main.class)
+        .setMinApi(AndroidApiLevel.L)
+        .compile();
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/shaking/b134858535/Interface.java b/src/test/java/com/android/tools/r8/shaking/b134858535/Interface.java
new file mode 100644
index 0000000..77c5ccb
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/shaking/b134858535/Interface.java
@@ -0,0 +1,10 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.shaking.b134858535;
+
+public interface Interface {
+
+  Object apply(Object foo);
+}
