Don't assume no library desugaring for desugared CF input

Bug: 190075882
Change-Id: I7468efaca90171b77a6418a10b3192d8c77d08d9
diff --git a/src/main/java/com/android/tools/r8/dex/Marker.java b/src/main/java/com/android/tools/r8/dex/Marker.java
index b892c4a..4770922 100644
--- a/src/main/java/com/android/tools/r8/dex/Marker.java
+++ b/src/main/java/com/android/tools/r8/dex/Marker.java
@@ -81,10 +81,17 @@
             .allMatch(m -> m.tool == Tool.L8 || m.getDesugaredLibraryIdentifiers().length == 0);
       } else {
         String[] identifiers = marker.getDesugaredLibraryIdentifiers();
-        String identifier;
+        String identifier = null;
         switch (identifiers.length) {
           case 0:
-            identifier = NO_LIBRARY_DESUGARING;
+            // Only add the <no-library-desugaring> identifier for DEX. A marker from CF is
+            // assumed to go though desugaring for compiling to DEX, and that will introduce the
+            // DEX marker with the final library desugaring identifier.
+            if (marker.isDexBackend()) {
+              identifier = NO_LIBRARY_DESUGARING;
+            } else {
+              assert marker.isCfBackend();
+            }
             break;
           case 1:
             identifier = identifiers[0];
@@ -95,10 +102,10 @@
                 new StringDiagnostic(
                     "Merging program compiled with multiple desugared libraries."));
         }
-        if (marker.isDesugared()) {
+        if (marker.isDesugared() && identifier != null) {
           desugaredLibraryIdentifiers.add(identifier);
         } else {
-          assert identifier.equals(NO_LIBRARY_DESUGARING);
+          assert identifier == null || identifier.equals(NO_LIBRARY_DESUGARING);
         }
       }
     }
@@ -211,11 +218,19 @@
   public String getBackend() {
     if (!hasBackend()) {
       // Before adding backend we would always compile to dex if min-api was specified.
-      return hasMinApi() ? "dex" : "cf";
+      return hasMinApi() ? Backend.DEX.name().toLowerCase() : Backend.CF.name().toLowerCase();
     }
     return jsonObject.get(BACKEND).getAsString();
   }
 
+  public boolean isCfBackend() {
+    return getBackend().equals(Backend.CF.name().toLowerCase());
+  }
+
+  public boolean isDexBackend() {
+    return getBackend().equals(Backend.DEX.name().toLowerCase());
+  }
+
   public Marker setBackend(Backend backend) {
     assert !hasBackend();
     jsonObject.addProperty(BACKEND, backend.name().toLowerCase());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
index 3e8c332..5f50a47 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DesugaredLibraryMismatchTest.java
@@ -90,26 +90,12 @@
             .writeToZip();
 
     // Combine CF desugared input without library desugaring with dexing with library desugaring.
-    try {
-      testForD8()
-          .addProgramFiles(desugaredLibrary)
-          .addProgramClasses(TestRunner.class)
-          .setMinApi(apiLevel)
-          .enableCoreLibraryDesugaring(apiLevel)
-          .compileWithExpectedDiagnostics(
-              diagnostics -> {
-                if (apiLevel.isLessThan(AndroidApiLevel.O)) {
-                  // This is the failure reported in b/190075882.
-                  diagnostics.assertOnlyErrors();
-                  diagnostics.assertErrorsMatch(
-                      diagnosticType(DesugaredLibraryMismatchDiagnostic.class));
-                } else {
-                  diagnostics.assertNoMessages();
-                }
-              });
-
-    } catch (CompilationFailedException e) {
-    }
+    testForD8()
+        .addProgramFiles(desugaredLibrary)
+        .addProgramClasses(TestRunner.class)
+        .setMinApi(apiLevel)
+        .enableCoreLibraryDesugaring(apiLevel)
+        .compile();
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingWithDesugaredLibraryTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingWithDesugaredLibraryTest.java
index 7c46fe3..be9ae1a 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingWithDesugaredLibraryTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/MergingWithDesugaredLibraryTest.java
@@ -160,31 +160,27 @@
 
     // Build an app using library desugaring merging with library not using library desugaring.
     Path app;
-    try {
-      app =
-          testForD8()
-              .addProgramFiles(buildPart1DesugaredLibrary(), desugaredLibDex)
-              .setMinApi(parameters.getApiLevel())
-              .compile()
-              .writeToZip();
+    app =
+        testForD8()
+            .addProgramFiles(buildPart1DesugaredLibrary(), desugaredLibDex)
+            .setMinApi(parameters.getApiLevel())
+            .compile()
+            .writeToZip();
 
-      // When there is no class-file resources we are adding the marker for the last compilation.
-      assertMarkersMatch(
-          ExtractMarker.extractMarkerFromDexFile(app),
-          ImmutableList.of(
-              markerMatcher,
-              allOf(
-                  markerTool(Tool.D8),
-                  markerCompilationMode(CompilationMode.DEBUG),
-                  markerBackend(Backend.DEX),
-                  markerIsDesugared(),
-                  markerMinApi(parameters.getApiLevel()),
-                  not(markerHasDesugaredLibraryIdentifier()))));
-    } catch (CompilationFailedException e) {
-      assertTrue(someLibraryDesugaringRequired());
-      return;
-    }
-    assert !someLibraryDesugaringRequired();
+    // When there is no class-file resources we are adding the marker for the last compilation.
+    assertMarkersMatch(
+        ExtractMarker.extractMarkerFromDexFile(app),
+        ImmutableList.of(
+            markerMatcher,
+            allOf(
+                markerTool(Tool.D8),
+                markerCompilationMode(CompilationMode.DEBUG),
+                markerBackend(Backend.DEX),
+                markerIsDesugared(),
+                markerMinApi(parameters.getApiLevel()),
+                someLibraryDesugaringRequired()
+                    ? markerHasDesugaredLibraryIdentifier()
+                    : not(markerHasDesugaredLibraryIdentifier()))));
   }
 
   private void assertError(TestDiagnosticMessages m) {