Don't inline catch handlers with an unkonwn API level

Bug: b/342961827
Change-Id: I471ef3dea9bd975af41db884b07530ec462aa968
diff --git a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
index 4a2dc9a..f663fd4 100644
--- a/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
+++ b/src/main/java/com/android/tools/r8/androidapi/ApiReferenceStubber.java
@@ -182,10 +182,6 @@
     }
   }
 
-  public static boolean isAlwaysStubbedType(DexType type, DexItemFactory factory) {
-    return !isNeverStubbedType(type, factory);
-  }
-
   public static boolean isNeverStubbedType(DexType type, DexItemFactory factory) {
     return isJavaType(type, factory);
   }
diff --git a/src/main/java/com/android/tools/r8/shaking/ComputeApiLevelUseRegistry.java b/src/main/java/com/android/tools/r8/shaking/ComputeApiLevelUseRegistry.java
index 76c8ee5..b996483 100644
--- a/src/main/java/com/android/tools/r8/shaking/ComputeApiLevelUseRegistry.java
+++ b/src/main/java/com/android/tools/r8/shaking/ComputeApiLevelUseRegistry.java
@@ -175,12 +175,9 @@
 
   private void setMaxApiReferenceLevelForGuard(DexType type) {
     if (isEnabled) {
-      if (ApiReferenceStubber.isAlwaysStubbedType(type, appInfoWithClassHierarchy.dexItemFactory())
-          && !appInfoWithClassHierarchy.options().canHaveDalvikCatchHandlerVerificationBug()) {
-        return;
-      }
       ComputedApiLevel computedApiLevel = apiLevelCompute.computeApiLevelForLibraryReference(type);
       if (ApiReferenceStubber.isNeverStubbedType(type, appInfoWithClassHierarchy.dexItemFactory())
+          || appInfoWithClassHierarchy.options().canHaveDalvikCatchHandlerVerificationBug()
           || computedApiLevel.isUnknownApiLevel()) {
         maxApiReferenceLevel = maxApiReferenceLevel.max(computedApiLevel);
       }
diff --git a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfTryCatchReferenceTest.java b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfTryCatchReferenceTest.java
index 6f52939..6074c6e 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfTryCatchReferenceTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ApiModelNoInliningOfTryCatchReferenceTest.java
@@ -24,7 +24,7 @@
 @RunWith(Parameterized.class)
 public class ApiModelNoInliningOfTryCatchReferenceTest extends TestBase {
 
-  private final AndroidApiLevel exceptionApiLevel = AndroidApiLevel.L_MR1;
+  private final AndroidApiLevel exceptionApiLevel = AndroidApiLevel.M;
 
   @Parameter() public TestParameters parameters;
 
@@ -50,16 +50,28 @@
         .apply(ApiModelingTestHelper::disableOutliningAndStubbing)
         .enableInliningAnnotations()
         .addHorizontallyMergedClassesInspector(
-            horizontallyMergedClassesInspector ->
+            horizontallyMergedClassesInspector -> {
+              // Dalvik verifier error present up to and not including L.
+              if (parameters.isDexRuntime()
+                  && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.L)) {
                 horizontallyMergedClassesInspector.assertIsCompleteMergeGroup(
-                    TestClass.class, Caller.class))
+                    TestClass.class, Caller.class);
+              } else {
+                horizontallyMergedClassesInspector.assertNoClassesMerged();
+              }
+            })
         .apply(
             ApiModelingTestHelper.addTracedApiReferenceLevelCallBack(
                 (reference, apiLevel) -> {
                   if (reference.equals(Reference.methodFromMethod(tryCatch))) {
-                    // The exception catch guard does not contribute to the modelled API level.
+                    // Dalvik verifier error present up to and not including L.
                     assertEquals(
-                        parameters.isCfRuntime() ? AndroidApiLevel.B : parameters.getApiLevel(),
+                        parameters.isDexRuntime()
+                                && parameters
+                                    .getApiLevel()
+                                    .isGreaterThanOrEqualTo(AndroidApiLevel.L)
+                            ? parameters.getApiLevel()
+                            : exceptionApiLevel,
                         apiLevel);
                   }
                 }))
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineCatchHandlerWithLibraryTypeTest.java b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineCatchHandlerWithLibraryTypeTest.java
index e8df112..4ff3f4f 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineCatchHandlerWithLibraryTypeTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/inliner/InlineCatchHandlerWithLibraryTypeTest.java
@@ -136,6 +136,7 @@
       assertFalse(mainHasInlinedCatchHandler);
     } else {
       assertEquals(
+          // Dalvik verifier error present up to and not including L.
           parameters.getApiLevel().isLessThanOrEqualTo(AndroidApiLevel.L)
               ? parameters.getApiLevel().getLevel() >= EXCEPTIONS.get(exception)
               : isPresentInRuntime() || isStubbed(),