Fix art, jctf, and run_on_app.py failures after new missing classes

Bug: 169531713
Bug: 179124746
Change-Id: I4657baa0b263c7af6755b40f34a2830455528363
diff --git a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
index ad3cbb8..0d7fe26 100644
--- a/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
+++ b/src/main/java/com/android/tools/r8/shaking/Enqueuer.java
@@ -4217,7 +4217,7 @@
         continue;
       }
 
-      DexProgramClass clazz = getProgramClassOrNull(type, method);
+      DexProgramClass clazz = getProgramClassOrNullFromReflectiveAccess(type, method);
       if (clazz != null && clazz.isInterface()) {
         // Add this interface to the set of pinned items to ensure that we do not merge the
         // interface into its unique subtype, if any.
diff --git a/src/test/java/com/android/tools/r8/JctfTestSpecifications.java b/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
index 899093a..2d21521 100644
--- a/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
+++ b/src/test/java/com/android/tools/r8/JctfTestSpecifications.java
@@ -1831,6 +1831,28 @@
           .put("lang.ref.WeakReference.get.WeakReference_get_A01", cf())
           .build(); // end of flakyWhenRun
 
+  public static final Set<String> hasMissingClasses =
+      ImmutableSet.of(
+          "lang.RuntimePermission.Class.RuntimePermission_class_A01",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A03",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A04",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A05",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A06",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A07",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A08",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A09",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A11",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A12",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A14",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A15",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A19",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A20",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A21",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A22",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A24",
+          "lang.RuntimePermission.Class.RuntimePermission_class_A25",
+          "lang.reflect.Proxy.serialization.Proxy_serialization_A02");
+
   public static final Multimap<String, TestCondition> timeoutsWhenRun =
       new ImmutableListMultimap.Builder<String, TestCondition>()
           .put("lang.Thread.interrupt.Thread_interrupt_A01", anyDexVm())
@@ -1956,7 +1978,7 @@
 
   public static final Set<String> compilationFailsWithAsmMethodTooLarge = ImmutableSet.of();
 
-  private static final boolean testMatch(
+  private static boolean testMatch(
       Multimap<String, TestCondition> testConditions,
       String name,
       CompilerUnderTest compilerUnderTest,
@@ -1971,7 +1993,7 @@
     return false;
   }
 
-  public static final <T> T getExpectedOutcome(
+  public static <T> T getExpectedOutcome(
       String name,
       CompilerUnderTest compilerUnderTest,
       Runtime runtime,
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index bef2c94..4b095bb 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -1207,6 +1207,7 @@
           "111-unresolvable-exception",
           "124-missing-classes",
           "127-checker-secondarydex",
+          "138-duplicate-classes-check2",
           "140-field-packing",
           "143-string-value",
           "151-OpenFileLimit",
@@ -1372,6 +1373,7 @@
         boolean skipRun,
         boolean failsOnRun,
         boolean disableInlining,
+        boolean hasMissingClasses,
         DexVm dexVm) {
       this(
           name,
@@ -1388,7 +1390,7 @@
           false,
           disableInlining,
           true, // Disable class inlining for JCTF tests.
-          false,
+          hasMissingClasses,
           true, // Disable desugaring for JCTF tests.
           ImmutableList.of(),
           null);
@@ -1400,7 +1402,8 @@
         File directory,
         boolean skipRun,
         boolean failsOnRun,
-        boolean disableInlining) {
+        boolean disableInlining,
+        boolean hasMissingClasses) {
       this(
           name,
           dexTool,
@@ -1416,7 +1419,7 @@
           false,
           disableInlining,
           true, // Disable class inlining for JCTF tests.
-          false,
+          hasMissingClasses,
           true, // Disable desugaring for JCTF tests.
           ImmutableList.of(),
           null);
@@ -1937,6 +1940,7 @@
                 || outcome == JctfTestSpecifications.Outcome.FLAKY_WHEN_RUN,
             outcome == JctfTestSpecifications.Outcome.FAILS_WHEN_RUN,
             noInlining,
+            JctfTestSpecifications.hasMissingClasses.contains(name),
             dexVm);
   }
 
@@ -1950,7 +1954,8 @@
             outcome == JctfTestSpecifications.Outcome.TIMEOUTS_WHEN_RUN
                 || outcome == JctfTestSpecifications.Outcome.FLAKY_WHEN_RUN,
             outcome == JctfTestSpecifications.Outcome.FAILS_WHEN_RUN,
-            noInlining);
+            noInlining,
+            JctfTestSpecifications.hasMissingClasses.contains(name));
   }
 
   private static Runtime getRuntime(TestRuntime vm) {
diff --git a/third_party/gmscore/ignorewarnings.rules b/third_party/gmscore/ignorewarnings.rules
new file mode 100644
index 0000000..f7766e0
--- /dev/null
+++ b/third_party/gmscore/ignorewarnings.rules
@@ -0,0 +1 @@
+-ignorewarnings
diff --git a/tools/gmscore_data.py b/tools/gmscore_data.py
index 44971c1..23a78e1 100644
--- a/tools/gmscore_data.py
+++ b/tools/gmscore_data.py
@@ -77,7 +77,8 @@
       'pgmap': '%s_proguard.map' % V9_PREFIX,
     },
     'deploy' : {
-      'pgconf': ['%s_proguard.config' % V9_PREFIX],
+      'pgconf': ['%s_proguard.config' % V9_PREFIX,
+                 os.path.join(BASE, 'ignorewarnings.rules')],
       'inputs': ['%s_deploy.jar' % V9_PREFIX],
       'min-api' : ANDROID_L_API,
     },