diff --git a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
index 9eccf41..b0d5055 100644
--- a/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
+++ b/src/main/java/com/android/tools/r8/BaseCompilerCommand.java
@@ -13,7 +13,6 @@
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.Reporter;
-import com.android.tools.r8.utils.StringDiagnostic;
 import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.List;
@@ -509,10 +508,6 @@
         }
         reporter.error(builder.toString());
       }
-      if (hasDesugaredLibraryConfiguration()) {
-        reporter.warning(
-            new StringDiagnostic("Desugared library configuration is still work in progress"));
-      }
       super.validate();
     }
   }
diff --git a/src/test/java/com/android/tools/r8/D8CommandTest.java b/src/test/java/com/android/tools/r8/D8CommandTest.java
index 1347279..ae63272 100644
--- a/src/test/java/com/android/tools/r8/D8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/D8CommandTest.java
@@ -525,19 +525,6 @@
         "Missing parameter", handler -> parse(handler, "--output"));
   }
 
-  @Test
-  public void warnForSpecialLibraryConfiguration() throws Throwable {
-    Path emptyZip = temp.getRoot().toPath().resolve("empty.zip");
-    DiagnosticsChecker.checkWarningsContains(
-        "Desugared library configuration is still work in progress",
-        handler ->
-            D8Command.builder(handler)
-                .addDesugaredLibraryConfiguration(
-                    StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
-                .setOutput(emptyZip, OutputMode.DexIndexed)
-                .build());
-  }
-
   private D8Command parse(String... args) throws CompilationFailedException {
     return D8Command.parse(args, EmbeddedOrigin.INSTANCE).build();
   }
diff --git a/src/test/java/com/android/tools/r8/L8CommandTest.java b/src/test/java/com/android/tools/r8/L8CommandTest.java
index 2370b74..7a72d1b 100644
--- a/src/test/java/com/android/tools/r8/L8CommandTest.java
+++ b/src/test/java/com/android/tools/r8/L8CommandTest.java
@@ -114,18 +114,6 @@
   }
 
   @Test
-  public void warnForSpecialLibraryConfiguration() throws Throwable {
-    DiagnosticsChecker.checkWarningsContains(
-        "Desugared library configuration is still work in progress",
-        handler ->
-            prepareBuilder(handler)
-                .setProgramConsumer(DexIndexedConsumer.emptyConsumer())
-                .addDesugaredLibraryConfiguration(
-                    StringResource.fromFile(ToolHelper.DESUGAR_LIB_JSON_FOR_TESTING))
-                .build());
-  }
-
-  @Test
   public void addProguardConfigurationString() throws Throwable {
     String keepRule = "-keep class java.time.*";
     List<String> keepRules = new ArrayList<>();
diff --git a/src/test/java/com/android/tools/r8/desugar/corelib/DisableDesugarTest.java b/src/test/java/com/android/tools/r8/desugar/corelib/DisableDesugarTest.java
index ca2ff2b..cb928cc 100644
--- a/src/test/java/com/android/tools/r8/desugar/corelib/DisableDesugarTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/corelib/DisableDesugarTest.java
@@ -34,10 +34,7 @@
 
   private void checkExpectedDiagnostics(TestDiagnosticMessages messages) {
     messages.assertInfosCount(0);
-    messages.assertWarningsCount(1);
-    assertThat(
-        messages.getWarnings().get(0).getDiagnosticMessage(),
-        containsString("Desugared library configuration is still work in progress"));
+    messages.assertWarningsCount(0);
     messages.assertErrorsCount(1);
     assertThat(
         messages.getErrors().get(0).getDiagnosticMessage(),
