diff --git a/src/test/java/com/android/tools/r8/desugaring/interfacemethods/Regress171867367.java b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/Regress171867367.java
new file mode 100644
index 0000000..09c20c3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/desugaring/interfacemethods/Regress171867367.java
@@ -0,0 +1,98 @@
+// Copyright (c) 2020, 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.desugaring.interfacemethods;
+
+import static org.junit.Assert.assertThrows;
+
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.D8TestBuilder;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class Regress171867367 extends TestBase {
+
+  private final TestParameters parameters;
+
+  @Parameterized.Parameters(name = "{0}")
+  public static List<Object[]> data() {
+    return buildParameters(
+        getTestParameters().withAllRuntimes().withAllApiLevelsAlsoForCf().build());
+  }
+
+  public Regress171867367(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void test() throws Exception {
+    Path path =
+        testForD8(Backend.CF)
+            .addProgramClasses(TestClass.class)
+            .setMinApi(parameters.getApiLevel())
+            .compile()
+            .writeToZip();
+    D8TestBuilder d8TestBuilder =
+        testForD8(parameters.getBackend())
+            .addProgramFiles(path)
+            .addProgramClasses(TestClass2.class)
+            .setMinApi(parameters.getApiLevel());
+    if (parameters.getApiLevel().isLessThan(AndroidApiLevel.L)) {
+      // TODO(b/171867367): Make us not fail when desugaring mixed (desugared and non desugared)
+      // inputs introduce a synthetic already present in the program input.
+      assertThrows(CompilationFailedException.class, d8TestBuilder::compile);
+    } else {
+      d8TestBuilder.run(TestClass.class).assertSuccessWithOutputLines("42", "43", "45");
+    }
+  }
+
+  static class TestClass {
+    public static void main(String[] args) {
+      List<Integer> values = new ArrayList<>();
+      values.add(42);
+      values.add(45);
+      values.add(43);
+      // Comparator.nulls{First,Last} are static interface methods, will trigger the CC class.
+      Collections.sort(
+          values,
+          Comparator.nullsFirst(
+              (a, b) -> {
+                return Integer.compare(a, b);
+              }));
+      Collections.sort(
+          values,
+          Comparator.nullsLast(
+              (a, b) -> {
+                return Integer.compare(a, b);
+              }));
+      for (Integer value : values) {
+        System.out.println(value);
+      }
+    }
+  }
+
+  static class TestClass2 {
+    public static void foo() {
+      List<Integer> values = new ArrayList<>();
+      values.add(142);
+      values.add(145);
+      values.add(143);
+      Collections.sort(
+          values,
+          Comparator.nullsFirst(
+              (a, b) -> {
+                return Integer.compare(a, b);
+              }));
+    }
+  }
+}
