Move -checkdiscard rule to its own file

This ensures that it is possible to build r8lib.jar with -dontoptimize or --debug.

Change-Id: I84b5b39fe3ce762582caf8cc6a1f265273be5088
diff --git a/d8_r8/test/build.gradle.kts b/d8_r8/test/build.gradle.kts
index dbf9725..5452757 100644
--- a/d8_r8/test/build.gradle.kts
+++ b/d8_r8/test/build.gradle.kts
@@ -188,6 +188,7 @@
     val r8WithRelocatedDepsJar = r8WithRelocatedDepsTask.getSingleOutputFile()
     val keepRuleFiles = listOf(
             getRoot().resolveAll("src", "main", "keep.txt"),
+            getRoot().resolveAll("src", "main", "discard.txt"),
             generatedKeepRulesProvider.getSingleOutputFile(),
             // TODO(b/294351878): Remove once enum issue is fixed
             getRoot().resolveAll("src", "main", "keep_r8resourceshrinker.txt"))
diff --git a/src/main/discard.txt b/src/main/discard.txt
new file mode 100644
index 0000000..0bb3220
--- /dev/null
+++ b/src/main/discard.txt
@@ -0,0 +1,11 @@
+# Copyright (c) 2024, 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.
+
+# Annotations for stripping debug code from r8lib.
+-assumenosideeffects class * {
+  @com.android.tools.r8.annotations.AssumeNoSideEffects <methods>;
+}
+-checkdiscard class * {
+  @com.android.tools.r8.annotations.CheckDiscard <fields>;
+}
diff --git a/src/main/keep.txt b/src/main/keep.txt
index 5faed98..83f70b1 100644
--- a/src/main/keep.txt
+++ b/src/main/keep.txt
@@ -27,13 +27,5 @@
 # TODO(b/176783536): Avoid need to use -dontwarn.
 -include dontwarn.txt
 
-# Annotations for stripping debug code from r8lib.
--assumenosideeffects class * {
-  @com.android.tools.r8.annotations.AssumeNoSideEffects <methods>;
-}
--checkdiscard class * {
-  @com.android.tools.r8.annotations.CheckDiscard <fields>;
-}
-
 # Test in this class is using the class name to fing the original .java file.
 -keep class com.android.tools.r8.ir.desugar.varhandle.VarHandleDesugaringMethods
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
index adefe58..49e8308 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapCurrentEqualityTest.java
@@ -27,6 +27,7 @@
 import com.android.tools.r8.utils.FileUtils;
 import com.android.tools.r8.utils.Pair;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import java.io.IOException;
 import java.nio.file.Path;
@@ -53,8 +54,10 @@
     }
   }
 
-  private static final Path MAIN_KEEP =
-      Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt");
+  private static final List<Path> KEEP_RULES_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
 
   private static final Class<?> HELLO_CLASS = HelloWorldProgram.class;
   private static final String HELLO_NAME = typeName(HELLO_CLASS);
@@ -100,7 +103,7 @@
         .setMode(mode)
         .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULES_FILES)
         .addOptionsModification(
             options -> options.getTestingOptions().dontReportFailingCheckDiscarded = mode.isDebug())
         .enableExperimentalKeepAnnotations()
@@ -173,7 +176,7 @@
             .useProvidedR8(ToolHelper.R8LIB_JAR)
             .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
             .addLibraryFiles(parameters.asCfRuntime().getJavaHome())
-            .addKeepRuleFiles(MAIN_KEEP)
+            .addKeepRuleFiles(KEEP_RULES_FILES)
             .setMode(CompilationMode.RELEASE)
             .compile()
             .outputJar();
@@ -183,7 +186,7 @@
             .addR8ExternalDepsToClasspath()
             .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
             .addLibraryFiles(parameters.asCfRuntime().getJavaHome())
-            .addKeepRuleFiles(MAIN_KEEP)
+            .addKeepRuleFiles(KEEP_RULES_FILES)
             .setMode(CompilationMode.RELEASE)
             .compile()
             .outputJar();
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
index a46b9f4..6afaa95 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/BootstrapDeterminismTest.java
@@ -12,9 +12,11 @@
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.DeterminismChecker;
+import com.google.common.collect.ImmutableList;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -25,8 +27,10 @@
 public class BootstrapDeterminismTest extends TestBase {
 
   private static final int ITERATIONS = 2;
-  private static final Path MAIN_KEEP =
-      Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt");
+  private static final List<Path> KEEP_RULES_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
 
   @Parameter public TestParameters parameters;
 
@@ -53,7 +57,7 @@
     testForR8(parameters.getBackend())
         .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULES_FILES)
         .addOptionsModification(
             options ->
                 options
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
index d058a31..7d92336 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/Java17R8BootstrapTest.java
@@ -4,7 +4,7 @@
 
 package com.android.tools.r8.bootstrap;
 
-import static com.android.tools.r8.bootstrap.JavaBootstrapUtils.MAIN_KEEP;
+import static com.android.tools.r8.bootstrap.JavaBootstrapUtils.KEEP_RULE_FILES;
 import static junit.framework.TestCase.assertEquals;
 
 import com.android.tools.r8.TestBase;
@@ -135,7 +135,7 @@
           testForExternalR8(Backend.CF, parameters.getRuntime())
               .useProvidedR8(jar)
               .addProgramFiles(helloJar)
-              .addKeepRuleFiles(MAIN_KEEP)
+              .addKeepRuleFiles(KEEP_RULE_FILES)
               .compile()
               .outputJar();
       if (prevGeneratedJar != null) {
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
index 793cb01..3d42188 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaBootstrapUtils.java
@@ -7,15 +7,21 @@
 import static junit.framework.TestCase.assertTrue;
 
 import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.InternalOptions.DesugarState;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
+import com.google.common.collect.ImmutableList;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.List;
 
 public class JavaBootstrapUtils extends TestBase {
 
-  static final Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+  static final List<Path> KEEP_RULE_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "keep.txt"),
+          Paths.get(ToolHelper.getProjectRoot(), "src", "main", "discard.txt"));
 
   static boolean exists(Path r8WithRelocatedDeps) {
     // This test runs only if the dependencies have been generated using:
@@ -32,7 +38,7 @@
     return testForR8(getStaticTemp(), Backend.CF)
         .addProgramFiles(r8WithRelocatedDeps)
         .addLibraryFiles(libraryFiles)
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULE_FILES)
         .applyIf(
             desugar,
             builder ->
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
index 6127e68..d1ba47f 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/JavaR8CompilationTest.java
@@ -43,7 +43,10 @@
         ImmutableList.of(ToolHelper.R8_WITH_RELOCATED_DEPS_17_JAR));
   }
 
-  private static final Path MAIN_KEEP = Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt");
+  private static final List<Path> KEEP_RULE_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt"),
+          Paths.get(ToolHelper.getProjectRoot(), "src/main/discard.txt"));
 
   private static void assertNoNests(CodeInspector inspector) {
     assertTrue(
@@ -56,7 +59,7 @@
     testForR8(parameters.getBackend())
         .setMinApi(parameters)
         .addProgramFiles(r8WithRelocatedDeps)
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULE_FILES)
         .compile()
         .inspect(this::assertNotEmpty)
         .inspect(JavaR8CompilationTest::assertNoNests);
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
index 1908d79..8e34583 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/R8CompiledThroughDexTest.java
@@ -35,6 +35,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.function.Consumer;
@@ -83,8 +84,10 @@
     return path.toAbsolutePath().toString();
   }
 
-  private static final String R8_KEEP =
-      Paths.get(ToolHelper.SOURCE_DIR + "main/keep.txt").toAbsolutePath().toString();
+  private static final Collection<Path> KEEP_RULE_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.SOURCE_DIR, "main/keep.txt"),
+          Paths.get(ToolHelper.SOURCE_DIR, "main/discard.txt"));
 
   private Pair<List<String>, Consumer<Builder>> buildArguments() {
     ImmutableList.Builder<String> arguments = ImmutableList.builder();
@@ -102,8 +105,10 @@
     arguments.add("--lib").add(commandLinePathFor(ToolHelper.getAndroidJar(AndroidApiLevel.R)));
     buildup.add(b -> b.addLibraryFiles(ToolHelper.getAndroidJar(AndroidApiLevel.R)));
 
-    arguments.add("--pg-conf").add(commandLinePathFor(R8_KEEP));
-    buildup.add(b -> b.addProguardConfigurationFiles(Paths.get(R8_KEEP)));
+    for (Path keepRuleFile : KEEP_RULE_FILES) {
+      arguments.add("--pg-conf").add(commandLinePathFor(keepRuleFile));
+      buildup.add(b -> b.addProguardConfigurationFiles(keepRuleFile));
+    }
 
     arguments
         .add("--desugared-lib")
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
index 35f157d..a1a71e7 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/RetraceStackTraceFunctionalCompositionTest.java
@@ -29,6 +29,7 @@
 import com.android.tools.r8.utils.StackTraceUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ZipUtils;
+import com.google.common.collect.ImmutableList;
 import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
@@ -242,14 +243,17 @@
   }
 
   private Pair<Path, Path> compileR8WithR8(Path r8Input) throws Exception {
-    Path MAIN_KEEP = Paths.get("src/main/keep.txt");
+    List<Path> KEEP_RULE_FILES =
+        ImmutableList.of(
+            Paths.get(ToolHelper.getProjectRoot(), "src/main/keep.txt"),
+            Paths.get(ToolHelper.getProjectRoot(), "src/main/discard.txt"));
     Path jar = temp.newFolder().toPath().resolve("out.jar");
     Path map = temp.newFolder().toPath().resolve("out.map");
     testForR8(Backend.CF)
         .setMode(CompilationMode.RELEASE)
         .addProgramFiles(r8Input)
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULE_FILES)
         .allowUnusedProguardConfigurationRules()
         .addDontObfuscate()
         .compile()
diff --git a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
index 514db55..78e6be3 100644
--- a/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
+++ b/src/test/bootstrap/com/android/tools/r8/bootstrap/WhyAreYouKeepingAllTest.java
@@ -13,8 +13,10 @@
 import com.android.tools.r8.TestParametersCollection;
 import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.utils.StringUtils;
+import com.google.common.collect.ImmutableList;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.List;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -27,7 +29,10 @@
 @RunWith(Parameterized.class)
 public class WhyAreYouKeepingAllTest extends TestBase {
 
-  private static final Path MAIN_KEEP = Paths.get(ToolHelper.SOURCE_DIR + "/main/keep.txt");
+  private static final List<Path> KEEP_RULE_FILES =
+      ImmutableList.of(
+          Paths.get(ToolHelper.SOURCE_DIR, "/main/keep.txt"),
+          Paths.get(ToolHelper.SOURCE_DIR, "/main/discard.txt"));
 
   private static final String WHY_ARE_YOU_KEEPING_ALL = StringUtils.lines(
       "-whyareyoukeeping class ** { *; }",
@@ -48,7 +53,7 @@
     testForR8(Backend.CF)
         .addProgramFiles(ToolHelper.getR8WithRelocatedDeps())
         .addLibraryProvider(JdkClassFileProvider.fromSystemJdk())
-        .addKeepRuleFiles(MAIN_KEEP)
+        .addKeepRuleFiles(KEEP_RULE_FILES)
         .addKeepRules(WHY_ARE_YOU_KEEPING_ALL)
         // Do not forward standard out since running with gradle will cause an error writing the
         // results.