Add Art from Android 14 (Android U, api level 34)

Built from branch udc-beta3-release (Beta 3).

Update android.jar for API level 34 and update API database based on that.

Update Record tests as this version of Art supports records natively.

Test: ./tools/test.py --no-internal --runtimes=dex-14.0.0:dex-9.0.0:jdk11:none
Change-Id: Ib885d4aaf3cfd6db5306bd04371ac7b406984b6e
Fixes: b/286005360
diff --git a/.gitignore b/.gitignore
index 018c71b..503889a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -296,8 +296,8 @@
 tools/*/host/art-12.0.0-beta4.tar.gz
 tools/*/host/art-13.0.0
 tools/*/host/art-13.0.0.tar.gz
-tools/*/host/art-14.0.0-dp1
-tools/*/host/art-14.0.0-dp1.tar.gz
+tools/*/host/art-14.0.0-beta3
+tools/*/host/art-14.0.0-beta3.tar.gz
 tools/*/host/art-master
 tools/*/host/art-master.tar.gz
 tools/*/art.tar.gz
diff --git a/build.gradle b/build.gradle
index 04704bc..e41cbf1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -377,7 +377,7 @@
                 "linux/art-10.0.0",
                 "linux/host/art-12.0.0-beta4",
                 "linux/host/art-13.0.0",
-                "linux/host/art-14.0.0-dp1",
+                "linux/host/art-14.0.0-beta3",
                 "linux/host/art-master",
                 "linux/dalvik",
                 "linux/dalvik-4.0.4",
diff --git a/scripts/add-android-jar.sh b/scripts/add-android-jar.sh
index eabdedc..e6ba2c2 100755
--- a/scripts/add-android-jar.sh
+++ b/scripts/add-android-jar.sh
@@ -16,8 +16,8 @@
 SDK_HOME=$HOME/Android/Sdk
 
 # Modify these to match the SDK android.jar to add.
-SDK_DIR_NAME=android-33
-SDK_VERSION=33
+SDK_DIR_NAME=android-UpsideDownCake
+SDK_VERSION=34
 
 SDK_DIR=$SDK_HOME/platforms/$SDK_DIR_NAME
 THIRD_PARTY_ANDROID_JAR=third_party/android_jar
diff --git a/src/test/examplesJava17/records/RecordWithAnnotations.java b/src/test/examplesJava17/records/RecordWithAnnotations.java
index d1648b6..fe9fd95 100644
--- a/src/test/examplesJava17/records/RecordWithAnnotations.java
+++ b/src/test/examplesJava17/records/RecordWithAnnotations.java
@@ -10,6 +10,9 @@
 import java.lang.annotation.Target;
 import java.lang.reflect.Field;
 import java.lang.reflect.RecordComponent;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
 
 public class RecordWithAnnotations {
 
@@ -56,16 +59,39 @@
         System.out.println(c.getType().getName());
         System.out.println(c.getGenericSignature() == null);
         System.out.println(c.getAnnotations().length);
+        // Collect and sort the annotations, as the order is not deterministic on Art (tested
+        // on Art 14 Beta 3).
+        List<String> annotations = new ArrayList<>();
         for (int j = 0; j < c.getAnnotations().length; j++) {
-          System.out.println(c.getAnnotations()[j]);
+          annotations.add(c.getAnnotations()[j].toString());
+        }
+        annotations.sort(Comparator.naturalOrder());
+        for (int j = 0; j < annotations.size(); j++) {
+          System.out.println(annotations.get(j));
         }
       }
       System.out.println(Person.class.getDeclaredFields().length);
+      List<Field> fields = new ArrayList<>();
       for (int i = 0; i < Person.class.getDeclaredFields().length; i++) {
-        Field f = Person.class.getDeclaredFields()[i];
+        fields.add(Person.class.getDeclaredFields()[i]);
+      }
+      fields.sort(
+          new Comparator<Field>() {
+            @Override
+            public int compare(Field o1, Field o2) {
+              return o1.getName().compareTo(o2.getName());
+            }
+          });
+      for (int i = 0; i < fields.size(); i++) {
+        Field f = fields.get(i);
         System.out.println(f.getDeclaredAnnotations().length);
+        List<String> annotations = new ArrayList<>();
         for (int j = 0; j < f.getDeclaredAnnotations().length; j++) {
-          System.out.println(f.getAnnotations()[j]);
+          annotations.add(f.getAnnotations()[j].toString());
+        }
+        annotations.sort(Comparator.naturalOrder());
+        for (int j = 0; j < annotations.size(); j++) {
+          System.out.println(annotations.get(j));
         }
       }
     }
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index 28625eb..595b3b7 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -168,6 +168,11 @@
     return assertFailure();
   }
 
+  public RR assertFailureWithOutputThatMatches(Matcher<String> matcher) {
+    assertStdoutMatches(matcher);
+    return assertFailure();
+  }
+
   public RR assertFailureWithErrorThatThrows(Class<? extends Throwable> expectedError) {
     return assertFailureWithErrorThatMatches(containsString(expectedError.getName()));
   }
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 1151357..596a13d 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -789,7 +789,7 @@
       ImmutableMap.<DexVm, String>builder()
           .put(DexVm.ART_DEFAULT, "art")
           .put(DexVm.ART_MASTER_HOST, "host/art-master")
-          .put(DexVm.ART_14_0_0_HOST, "host/art-14.0.0-dp1")
+          .put(DexVm.ART_14_0_0_HOST, "host/art-14.0.0-beta3")
           .put(DexVm.ART_13_0_0_HOST, "host/art-13.0.0")
           .put(DexVm.ART_12_0_0_HOST, "host/art-12.0.0-beta4")
           .put(DexVm.ART_10_0_0_HOST, "art-10.0.0")
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index cda9c15..8605db0 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -110,9 +110,9 @@
                   methodReferences.forEach(field -> numberOfMethods.increment())));
         });
     // These numbers will change when updating api-versions.xml
-    assertEquals(5635, parsedApiClasses.size());
-    assertEquals(29017, numberOfFields.get());
-    assertEquals(44107, numberOfMethods.get());
+    assertEquals(5716, parsedApiClasses.size());
+    assertEquals(29609, numberOfFields.get());
+    assertEquals(44827, numberOfMethods.get());
   }
 
   @Test
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
index 802ccce..fbbadb0 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
@@ -130,7 +130,12 @@
       } else if (parameters.isDexRuntime()
           && parameters.asDexRuntime().getVersion().isNewerThan(Version.V9_0_0)) {
         // VMs between 9 and 13 segfault.
-        result.assertFailureWithErrorThatMatches(containsString("HandleUnexpectedSignal"));
+        if (parameters.asDexRuntime().getVersion().isEqualTo(Version.V14_0_0)) {
+          result.assertFailureWithOutputThatMatches(
+              containsString("reverting to SIG_DFL handler for signal 11"));
+        } else {
+          result.assertFailureWithErrorThatMatches(containsString("HandleUnexpectedSignal"));
+        }
       } else {
         result.assertSuccessWithOutput(getExpected());
       }
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
index 089553b..f1e10a1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
@@ -12,6 +12,7 @@
 import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
 import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -69,11 +70,13 @@
     if (libraryDesugaringSpecification.hasTimeDesugaring(parameters)) {
       run.assertSuccessWithOutput(
           parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+                  && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
               ? expectedOutputDesugaredLibNNBSP
               : expectedOutputDesugaredLib);
     } else {
       run.assertSuccessWithOutput(
           parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+                  && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
               ? expectedOutputNNBSP
               : expectedOutput);
     }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
index dc3ef4e..14485c9 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
@@ -16,6 +16,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.Pair;
@@ -35,7 +36,7 @@
   private static final String RECORD_NAME = "RecordWithAnnotations";
   private static final byte[][] PROGRAM_DATA = RecordTestUtils.getProgramData(RECORD_NAME);
   private static final String MAIN_TYPE = RecordTestUtils.getMainType(RECORD_NAME);
-  private static final String EXPECTED_RESULT =
+  private static final String JVM_EXPECTED_RESULT =
       StringUtils.lines(
           "Jane Doe",
           "42",
@@ -57,12 +58,39 @@
           "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(\"z\")",
           "2",
           "2",
-          "@records.RecordWithAnnotations$Annotation(\"a\")",
-          "@records.RecordWithAnnotations$AnnotationFieldOnly(\"b\")",
-          "2",
           "@records.RecordWithAnnotations$Annotation(\"x\")",
-          "@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")");
-  private static final String EXPECTED_RESULT_R8 =
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(\"a\")",
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(\"b\")");
+  private static final String ART_EXPECTED_RESULT =
+      StringUtils.lines(
+          "Jane Doe",
+          "42",
+          "Jane Doe",
+          "42",
+          "true",
+          "2",
+          "name",
+          "java.lang.String",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=a)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+          "age",
+          "int",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=x)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+          "2",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=x)",
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(value=y)",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=a)",
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(value=b)");
+  private static final String JVM_EXPECTED_RESULT_R8 =
       StringUtils.lines(
           "Jane Doe",
           "42",
@@ -89,7 +117,34 @@
           "2",
           "@records.RecordWithAnnotations$Annotation(\"x\")",
           "@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")");
-  private static final String EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
+  private static final String ART_EXPECTED_RESULT_R8 =
+      StringUtils.lines(
+          "Jane Doe",
+          "42",
+          "Jane Doe",
+          "42",
+          "true",
+          "2",
+          "a",
+          "java.lang.String",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=a)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+          "b",
+          "int",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=x)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+          "2",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=a)",
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(value=b)",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=x)",
+          "@records.RecordWithAnnotations$AnnotationFieldOnly(value=y)");
+  private static final String JVM_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
       StringUtils.lines(
           "Jane Doe",
           "42",
@@ -112,10 +167,33 @@
           "2",
           "0",
           "0");
-  private static final String EXPECTED_RESULT_DESUGARED =
-      StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
-  private static final String EXPECTED_RESULT_DESUGARED_JVM17 =
+  private static final String ART_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
+      StringUtils.lines(
+          "Jane Doe",
+          "42",
+          "Jane Doe",
+          "42",
+          "true",
+          "2",
+          "a",
+          "java.lang.String",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=a)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+          "b",
+          "int",
+          "true",
+          "2",
+          "@records.RecordWithAnnotations$Annotation(value=x)",
+          "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+          "2",
+          "0",
+          "0");
+  private static final String EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT =
       StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "false");
+  private static final String EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT =
+      StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
 
   @Parameter(0)
   public TestParameters parameters;
@@ -141,7 +219,7 @@
     testForJvm(parameters)
         .addProgramClassFileData(PROGRAM_DATA)
         .run(parameters.getRuntime(), MAIN_TYPE)
-        .assertSuccessWithOutput(EXPECTED_RESULT);
+        .assertSuccessWithOutput(JVM_EXPECTED_RESULT);
   }
 
   @Test
@@ -151,6 +229,8 @@
     // Android U will support records.
     boolean compilingForNativeRecordSupport =
         parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+    boolean runtimeWithNativeRecordSupport =
+        parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V14_0_0);
     testForDesugaring(
             parameters,
             options -> {
@@ -164,16 +244,13 @@
         .addProgramClassFileData(PROGRAM_DATA)
         .run(parameters.getRuntime(), MAIN_TYPE)
         .applyIf(
-            parameters.isDexRuntime() && compilingForNativeRecordSupport,
-            // Current Art 14 build does not support the java.lang.Record class.
-            r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
             compilingForNativeRecordSupport,
-            r -> r.assertSuccessWithOutput(EXPECTED_RESULT),
+            r -> r.assertSuccessWithOutput(ART_EXPECTED_RESULT),
             r ->
                 r.assertSuccessWithOutput(
-                        !parameters.isCfRuntime()
-                            ? EXPECTED_RESULT_DESUGARED
-                            : EXPECTED_RESULT_DESUGARED_JVM17)
+                        !runtimeWithNativeRecordSupport
+                            ? EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT
+                            : EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT)
                     .inspect(
                         inspector -> {
                           ClassSubject person =
@@ -247,6 +324,9 @@
     boolean compilingForNativeRecordSupport =
         parameters.isCfRuntime()
             || parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+    boolean runtimeWithNativeRecordSupport =
+        parameters.isCfRuntime()
+            || parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V14_0_0);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(PROGRAM_DATA)
         // TODO(b/231930852): Change to android.jar for Androud U when that contains
@@ -317,16 +397,24 @@
             })
         .run(parameters.getRuntime(), MAIN_TYPE)
         .applyIf(
-            parameters.isCfRuntime(),
             // TODO(b/274888318): EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS still has component
             //  annotations.
+            parameters.isCfRuntime(),
             r ->
                 r.assertSuccessWithOutput(
-                    keepAnnotations ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
-            // r -> r.assertSuccessWithOutput(EXPECTED_RESULT_R8),
+                    keepAnnotations
+                        ? JVM_EXPECTED_RESULT_R8
+                        : JVM_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
             compilingForNativeRecordSupport,
-            // Current Art 14 build does not support the java.lang.Record class.
-            r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
-            r -> r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED));
+            r ->
+                r.assertSuccessWithOutput(
+                    keepAnnotations
+                        ? ART_EXPECTED_RESULT_R8
+                        : ART_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
+            r ->
+                r.assertSuccessWithOutput(
+                    runtimeWithNativeRecordSupport
+                        ? EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT
+                        : EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
index 5ce845f..fe07ad0 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestRuntime.CfVm;
 import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.StringUtils;
@@ -56,6 +57,8 @@
           "Jane Doe", "42", "Jane Doe", "42", "true", "1", "a", "java.lang.Object", "null", "0");
   private static final String EXPECTED_RESULT_DESUGARED =
       StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
+  private static final String EXPECTED_RESULT_DESUGARED_ART_14 =
+      StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "false");
 
   @Parameter(0)
   public TestParameters parameters;
@@ -91,6 +94,9 @@
     // Android U will support records.
     boolean compilingForNativeRecordSupport =
         parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+    boolean runningWithNativeRecordSupport =
+        parameters.getRuntime().isDex()
+            && parameters.getRuntime().asDex().getVersion().isNewerThanOrEqual(Version.V14_0_0);
     testForDesugaring(
             parameters,
             options -> {
@@ -106,9 +112,12 @@
         .applyIf(
             compilingForNativeRecordSupport,
             // Current Art 14 build does not support the java.lang.Record class.
-            r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
+            r -> r.assertSuccessWithOutput(EXPECTED_RESULT),
             r ->
-                r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED)
+                r.assertSuccessWithOutput(
+                        runningWithNativeRecordSupport
+                            ? EXPECTED_RESULT_DESUGARED_ART_14
+                            : EXPECTED_RESULT_DESUGARED)
                     .inspect(
                         inspector -> {
                           ClassSubject person =
@@ -154,6 +163,9 @@
     boolean compilingForNativeRecordSupport =
         parameters.isCfRuntime()
             || parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+    boolean runningWithNativeRecordSupport =
+        parameters.getRuntime().isDex()
+            && parameters.getRuntime().asDex().getVersion().isNewerThanOrEqual(Version.V14_0_0);
     testForR8(parameters.getBackend())
         .addProgramClassFileData(PROGRAM_DATA)
         // TODO(b/231930852): Change to android.jar for Androud U when that contains
@@ -193,13 +205,14 @@
         .run(parameters.getRuntime(), MAIN_TYPE)
         // No Art VM actually supports the java.lang.Record class.
         .applyIf(
-            parameters.isCfRuntime(),
+            compilingForNativeRecordSupport,
             r ->
                 r.assertSuccessWithOutput(
                     keepSignatures ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_KEEP_SIGNATURE),
-            compilingForNativeRecordSupport,
-            // Current Art 14 build does not support the java.lang.Record class.
-            r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
-            r -> r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED));
+            r ->
+                r.assertSuccessWithOutput(
+                    runningWithNativeRecordSupport
+                        ? EXPECTED_RESULT_DESUGARED_ART_14
+                        : EXPECTED_RESULT_DESUGARED));
   }
 }
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
index 3e1c8ce..00a590e 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
@@ -4,9 +4,13 @@
 
 package com.android.tools.r8.desugar.records;
 
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
+import static org.hamcrest.CoreMatchers.containsString;
+
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import com.android.tools.r8.utils.StringUtils;
 import java.nio.file.Path;
 import org.junit.Test;
@@ -77,7 +81,20 @@
         .addProgramFiles(desugared)
         .setMinApi(parameters)
         .addKeepMainRule(MAIN_TYPE)
-        .compile()
+        .applyIf(
+            parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U),
+            b -> b.allowDiagnosticWarningMessages())
+        .compileWithExpectedDiagnostics(
+            // Type com.android.tools.r8.RecordTag from desugared code will be converted to
+            // java.lang.Record during reading causing duplicate java.lang.Record class.
+            parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
+                ? diagnostics ->
+                    diagnostics.assertWarningsMatch(
+                        diagnosticMessage(
+                            containsString(
+                                "The following library types, prefixed by java., are present both"
+                                    + " as library and non library classes: java.lang.Record.")))
+                : diagnostics -> diagnostics.assertNoMessages())
         .run(parameters.getRuntime(), MAIN_TYPE)
         .assertSuccessWithOutput(EXPECTED_RESULT_R8);
   }
diff --git a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
index bd06608..bda012e 100644
--- a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
+++ b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
@@ -50,7 +50,7 @@
             .setProgramConsumer(new DexIndexedConsumer.ArchiveConsumer(output))
             .build());
     CodeInspector inspector = new CodeInspector(output);
-    assertEquals(1026, inspector.allClasses().size());
+    assertEquals(1044, inspector.allClasses().size());
   }
 
   @Test
diff --git a/third_party/android_jar/lib-v34.tar.gz.sha1 b/third_party/android_jar/lib-v34.tar.gz.sha1
index 3b7b739..0c3c782 100644
--- a/third_party/android_jar/lib-v34.tar.gz.sha1
+++ b/third_party/android_jar/lib-v34.tar.gz.sha1
@@ -1 +1 @@
-ac28074fa7b977e03eb0692248e1edcee36a2c33
\ No newline at end of file
+0b366542a5c6536e93da29e5f13bd320df6e2e34
\ No newline at end of file
diff --git a/third_party/api_database/api_database.tar.gz.sha1 b/third_party/api_database/api_database.tar.gz.sha1
index 9883fe5..5749b41 100644
--- a/third_party/api_database/api_database.tar.gz.sha1
+++ b/third_party/api_database/api_database.tar.gz.sha1
@@ -1 +1 @@
-29b5c8dfdccf33e7a540d5de29476805a7d5c2f0
\ No newline at end of file
+9570931632e830d695b18bd83f69456c74196d6e
\ No newline at end of file
diff --git a/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1 b/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1
new file mode 100644
index 0000000..42f9f43
--- /dev/null
+++ b/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1
@@ -0,0 +1 @@
+c879ddf6410159a4ac7e673fd66a64abe2140ffa
\ No newline at end of file
diff --git a/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1 b/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1
deleted file mode 100644
index c88b923..0000000
--- a/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1c41f5d79e335ff132b7a95d995b65581c250df8
\ No newline at end of file