diff --git a/src/main/java/com/android/tools/r8/GenerateMainDexList.java b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
index 48c2cde..1be9b3a 100644
--- a/src/main/java/com/android/tools/r8/GenerateMainDexList.java
+++ b/src/main/java/com/android/tools/r8/GenerateMainDexList.java
@@ -10,6 +10,7 @@
 import com.android.tools.r8.graph.DexApplication;
 import com.android.tools.r8.graph.DexDefinition;
 import com.android.tools.r8.graph.GraphLense;
+import com.android.tools.r8.shaking.DiscardedChecker;
 import com.android.tools.r8.shaking.Enqueuer;
 import com.android.tools.r8.shaking.Enqueuer.AppInfoWithLiveness;
 import com.android.tools.r8.shaking.MainDexClasses;
@@ -72,6 +73,11 @@
         options.mainDexListConsumer.accept(String.join("\n", result), options.reporter);
       }
 
+      if (!mainDexRootSet.checkDiscarded.isEmpty()) {
+        new DiscardedChecker(
+            mainDexRootSet, mainDexClasses.getClasses(), appView.appInfo(), options)
+            .run();
+      }
       // Print -whyareyoukeeping results if any.
       if (whyAreYouKeepingConsumer != null) {
         for (DexDefinition definition : mainDexRootSet.reasonAsked) {
diff --git a/src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java b/src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
index cd85cd4..16958a6 100644
--- a/src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
+++ b/src/test/java/com/android/tools/r8/maindexlist/checkdiscard/MainDexListCheckDiscard.java
@@ -6,14 +6,22 @@
 
 import com.android.tools.r8.CompilationFailedException;
 import com.android.tools.r8.CompilationMode;
+import com.android.tools.r8.GenerateMainDexList;
+import com.android.tools.r8.GenerateMainDexListCommand;
 import com.android.tools.r8.OutputMode;
 import com.android.tools.r8.R8Command;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.errors.Unreachable;
 import com.android.tools.r8.origin.Origin;
+import com.android.tools.r8.utils.ListUtils;
 import com.google.common.collect.ImmutableList;
+import java.util.List;
 import org.junit.Assert;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
 
 class HelloWorldMain {
   public static void main(String[] args) {
@@ -25,8 +33,29 @@
 
 class NonMainDexClass {}
 
+@RunWith(Parameterized.class)
 public class MainDexListCheckDiscard extends TestBase {
-  public void runTest(String checkDiscardRule, boolean shouldFail) throws Exception {
+  private enum Command {
+    R8,
+    Generator
+  }
+
+  private static final List<Class<?>> CLASSES =
+      ImmutableList.of(HelloWorldMain.class, MainDexClass.class, NonMainDexClass.class);
+
+  @Parameters(name = "{0}")
+  public static Object[] parameters() {
+    return Command.values();
+  }
+
+  private final Command command;
+
+  public MainDexListCheckDiscard(Command command) {
+    this.command = command;
+  }
+
+
+  public void runTestWithR8(String checkDiscardRule) throws Exception {
     R8Command command =
         ToolHelper.prepareR8CommandBuilder(
                 readClasses(HelloWorldMain.class, MainDexClass.class, NonMainDexClass.class))
@@ -39,8 +68,33 @@
             .setDisableTreeShaking(true)
             .setDisableMinification(true)
             .build();
+    ToolHelper.runR8(command);
+  }
+
+  public void runTestWithGenerator(String checkDiscardRule) throws Exception {
+    GenerateMainDexListCommand.Builder builder =
+        GenerateMainDexListCommand.builder()
+            .addProgramFiles(ListUtils.map(CLASSES, ToolHelper::getClassFileForTestClass))
+            .addLibraryFiles(ToolHelper.getDefaultAndroidJar())
+            .addMainDexRules(
+                ImmutableList.of(keepMainProguardConfiguration(HelloWorldMain.class)),
+                Origin.unknown())
+            .addMainDexRules(ImmutableList.of(checkDiscardRule), Origin.unknown());
+    GenerateMainDexList.run(builder.build());
+  }
+
+  public void runTest(String checkDiscardRule, boolean shouldFail) throws Exception {
     try {
-      ToolHelper.runR8(command);
+      switch (command) {
+        case R8:
+          runTestWithR8(checkDiscardRule);
+          break;
+        case Generator:
+          runTestWithGenerator(checkDiscardRule);
+          break;
+        default:
+          throw new Unreachable();
+      }
     } catch (CompilationFailedException e) {
       Assert.assertTrue(shouldFail);
       return;
