Add Art from Android 14 (Android U, api level 34)
Built from branch udc-preview1-release (DP1).
Test: ./tools/test.py --no-internal --runtimes=dex-14.0.0:dex-9.0.0:jdk11:none
Fixes: b/270670592
Content of third_party/android_jar/libcore_latest/README.google:
Name: libcore
URL: https://source.android.com/
Version: Libcore AOSP master 938cf8bddefb1f96e67f2450da0eb492599f8516
Revision: NA
License: The GNU General Public License (GPL)
Description:
This is the core-oj.jar pulled from building aosp master.
lunch aosp_redfin-userdebug
m -j
cp out/soong/.intermediates/libcore/core-oj/android_common_apex10000/javac/core-oj.jar ...
Change-Id: I2c9f1346a049b734596d4bef1821bf495b5a1588
diff --git a/.gitignore b/.gitignore
index 442dc51..13e30c3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -286,6 +286,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-master
tools/*/host/art-master.tar.gz
tools/*/art.tar.gz
diff --git a/build.gradle b/build.gradle
index 759507d..11cc609 100644
--- a/build.gradle
+++ b/build.gradle
@@ -393,6 +393,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-master",
"linux/dalvik",
"linux/dalvik-4.0.4",
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
index 2e7e2e3..fd21f2a 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApiLevel.java
@@ -47,12 +47,13 @@
MASTER(35), // API level for master is tentative.
ANDROID_PLATFORM(10000);
- // When updating LATEST and a new version goes stable, add a new api-versions.xml to third_party
- // and update the version and generated jar in AndroidApiDatabaseBuilderGeneratorTest.
- public static final AndroidApiLevel LATEST = T;
+ // When updating LATEST and a new version goes public, add a new api-versions.xml to third_party
+ // and update the version and generated jar in AndroidApiDatabaseBuilderGeneratorTest. Together
+ // with that update third_party/android_jar/libcore_latest/core-oj.jar and run
+ // GenerateCovariantReturnTypeMethodsTest.
+ public static final AndroidApiLevel LATEST = U;
- // TODO(b/268601605): When adding U to the test matrix, set this to LATEST.
- public static final AndroidApiLevel API_DATABASE_LEVEL = U;
+ public static final AndroidApiLevel API_DATABASE_LEVEL = LATEST;
private final int level;
@@ -109,7 +110,7 @@
public static AndroidApiLevel getAndroidApiLevel(int apiLevel) {
assert apiLevel > 0;
- assert T == LATEST; // This has to be updated when we add new api levels.
+ assert U == LATEST; // This has to be updated when we add new api levels.
assert ANDROID_PLATFORM.isGreaterThan(LATEST);
switch (apiLevel) {
case 1:
diff --git a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
index da660e7..a1a6580 100644
--- a/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunArtTestsTest.java
@@ -100,7 +100,8 @@
DexVm.Version.V9_0_0,
DexVm.Version.V10_0_0,
DexVm.Version.V12_0_0,
- DexVm.Version.V13_0_0);
+ DexVm.Version.V13_0_0,
+ DexVm.Version.V14_0_0);
private static final String JUNIT_TEST_RUNNER = "org.junit.runner.JUnitCore";
private static final String JUNIT_JAR = "third_party/junit/junit-4.13-beta-2.jar";
@@ -184,13 +185,15 @@
.put(
"098-ddmc",
TestCondition.match(
- TestCondition.runtimes(DexVm.Version.V12_0_0, DexVm.Version.V13_0_0)))
+ TestCondition.runtimes(
+ DexVm.Version.V12_0_0, DexVm.Version.V13_0_0, DexVm.Version.V14_0_0)))
// TODO(b/197079442): Triage - fails with "java.lang.NoSuchMethodException:
// org.apache.harmony.dalvik.ddmc.DdmVmInternal.enableRecentAllocations [boolean]"
.put(
"145-alloc-tracking-stress",
TestCondition.match(
- TestCondition.runtimes(DexVm.Version.V12_0_0, DexVm.Version.V13_0_0)))
+ TestCondition.runtimes(
+ DexVm.Version.V12_0_0, DexVm.Version.V13_0_0, DexVm.Version.V14_0_0)))
.build();
// Tests that are flaky with the Art version we currently use.
@@ -496,6 +499,7 @@
static {
ImmutableMap.Builder<DexVm.Version, List<String>> builder = ImmutableMap.builder();
builder
+ .put(DexVm.Version.V14_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
.put(DexVm.Version.V13_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
.put(DexVm.Version.V12_0_0, ImmutableList.of("543-env-long-ref", "518-null-array-get"))
.put(
@@ -832,7 +836,8 @@
DexVm.Version.V5_1_1,
DexVm.Version.V6_0_1,
DexVm.Version.V7_0_0,
- DexVm.Version.V13_0_0)),
+ DexVm.Version.V13_0_0,
+ DexVm.Version.V14_0_0)),
TestCondition.match(
TestCondition.compilers(
CompilerUnderTest.R8,
@@ -861,7 +866,8 @@
DexVm.Version.V9_0_0,
DexVm.Version.V10_0_0,
DexVm.Version.V12_0_0,
- DexVm.Version.V13_0_0)))
+ DexVm.Version.V13_0_0,
+ DexVm.Version.V14_0_0)))
.put("454-get-vreg", TestCondition.match(TestCondition.R8DEX_COMPILER))
// Fails: regs_jni.cc:42] Check failed: GetVReg(m, 0, kIntVReg, &value)
// The R8/D8 code does not put values in the same registers as the tests expects.
@@ -878,7 +884,8 @@
DexVm.Version.V9_0_0,
DexVm.Version.V10_0_0,
DexVm.Version.V12_0_0,
- DexVm.Version.V13_0_0)))
+ DexVm.Version.V13_0_0,
+ DexVm.Version.V14_0_0)))
.put("457-regs", TestCondition.match(TestCondition.R8DEX_COMPILER))
// Class not found.
.put("529-checker-unresolved", TestCondition.any())
diff --git a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
index a4cbbc2..a89ee46 100644
--- a/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
+++ b/src/test/java/com/android/tools/r8/R8RunSmaliTestsTest.java
@@ -132,29 +132,41 @@
private static final Map<DexVm.Version, Map<String, String>> customProcessedOutputExpectation =
ImmutableMap.of(
Version.V4_4_4,
- ImmutableMap.of(
- "bad-codegen", "java.lang.NullPointerException\n",
- "type-confusion-regression2", "java.lang.NullPointerException\n",
- "type-confusion-regression3", "java.lang.NullPointerException\n",
- "merge-blocks-regression", "java.lang.NullPointerException\n"),
+ ImmutableMap.of(
+ "bad-codegen", "java.lang.NullPointerException\n",
+ "type-confusion-regression2", "java.lang.NullPointerException\n",
+ "type-confusion-regression3", "java.lang.NullPointerException\n",
+ "merge-blocks-regression", "java.lang.NullPointerException\n"),
Version.V4_0_4,
- ImmutableMap.of(
- "bad-codegen", "java.lang.NullPointerException\n",
- "type-confusion-regression2", "java.lang.NullPointerException\n",
- "type-confusion-regression3", "java.lang.NullPointerException\n",
- "merge-blocks-regression", "java.lang.NullPointerException\n"),
+ ImmutableMap.of(
+ "bad-codegen", "java.lang.NullPointerException\n",
+ "type-confusion-regression2", "java.lang.NullPointerException\n",
+ "type-confusion-regression3", "java.lang.NullPointerException\n",
+ "merge-blocks-regression", "java.lang.NullPointerException\n"),
Version.V13_0_0,
- ImmutableMap.of(
- "bad-codegen",
- StringUtils.lines(
- "java.lang.NullPointerException: Attempt to read from field 'Test Test.a'"
- + " on a null object reference in method 'Test TestObject.a(Test,"
- + " Test, Test, Test, boolean)'"),
- "type-confusion-regression3",
- StringUtils.lines(
- "java.lang.NullPointerException: Attempt to read from field 'byte[]"
- + " Test.a' on a null object reference in method 'int"
- + " TestObject.a(Test, Test)'")));
+ ImmutableMap.of(
+ "bad-codegen",
+ StringUtils.lines(
+ "java.lang.NullPointerException: Attempt to read from field 'Test Test.a'"
+ + " on a null object reference in method 'Test TestObject.a(Test,"
+ + " Test, Test, Test, boolean)'"),
+ "type-confusion-regression3",
+ StringUtils.lines(
+ "java.lang.NullPointerException: Attempt to read from field 'byte[]"
+ + " Test.a' on a null object reference in method 'int"
+ + " TestObject.a(Test, Test)'")),
+ Version.V14_0_0,
+ ImmutableMap.of(
+ "bad-codegen",
+ StringUtils.lines(
+ "java.lang.NullPointerException: Attempt to read from field 'Test Test.a'"
+ + " on a null object reference in method 'Test TestObject.a(Test,"
+ + " Test, Test, Test, boolean)'"),
+ "type-confusion-regression3",
+ StringUtils.lines(
+ "java.lang.NullPointerException: Attempt to read from field 'byte[]"
+ + " Test.a' on a null object reference in method 'int"
+ + " TestObject.a(Test, Test)'")));
// Tests where the input fails with a verification error on Dalvik instead of the
// expected runtime exception.
diff --git a/src/test/java/com/android/tools/r8/TestCondition.java b/src/test/java/com/android/tools/r8/TestCondition.java
index e4cec10..a23c980 100644
--- a/src/test/java/com/android/tools/r8/TestCondition.java
+++ b/src/test/java/com/android/tools/r8/TestCondition.java
@@ -27,6 +27,7 @@
ART_V10_0_0,
ART_V12_0_0,
ART_V13_0_0,
+ ART_V14_0_0,
ART_DEFAULT,
ART_MASTER,
JAVA;
@@ -56,6 +57,8 @@
return ART_V12_0_0;
case V13_0_0:
return ART_V13_0_0;
+ case V14_0_0:
+ return ART_V14_0_0;
case DEFAULT:
return ART_DEFAULT;
case MASTER:
diff --git a/src/test/java/com/android/tools/r8/TestParameters.java b/src/test/java/com/android/tools/r8/TestParameters.java
index a05309c..c22f43e 100644
--- a/src/test/java/com/android/tools/r8/TestParameters.java
+++ b/src/test/java/com/android/tools/r8/TestParameters.java
@@ -105,6 +105,11 @@
return false;
}
+ public boolean runtimeWithClassValue() {
+ assert isCfRuntime() || isDexRuntime();
+ return isCfRuntime() || getDexRuntimeVersion().isNewerThanOrEqual(DexVm.Version.V14_0_0);
+ }
+
// Convenience predicates.
public boolean isDexRuntime() {
return runtime.isDex();
@@ -127,7 +132,11 @@
}
public boolean isDexRuntimeVersion(DexVm.Version vm) {
- return isDexRuntime() && vm == getDexRuntimeVersion();
+ return isDexRuntime() && getDexRuntimeVersion().isEqualTo(vm);
+ }
+
+ public boolean isDexRuntimeVersionNewerThanOrEqual(DexVm.Version vm) {
+ return isDexRuntime() && getDexRuntimeVersion().isNewerThanOrEqual(vm);
}
public boolean isNoneRuntime() {
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index bbdc05b..51ed733 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -273,6 +273,8 @@
ART_12_0_0_HOST(Version.V12_0_0, Kind.HOST),
ART_13_0_0_TARGET(Version.V13_0_0, Kind.TARGET),
ART_13_0_0_HOST(Version.V13_0_0, Kind.HOST),
+ ART_14_0_0_TARGET(Version.V14_0_0, Kind.TARGET),
+ ART_14_0_0_HOST(Version.V14_0_0, Kind.HOST),
ART_MASTER_TARGET(Version.MASTER, Kind.TARGET),
ART_MASTER_HOST(Version.MASTER, Kind.HOST);
@@ -293,6 +295,7 @@
V10_0_0("10.0.0"),
V12_0_0("12.0.0"),
V13_0_0("13.0.0"),
+ V14_0_0("14.0.0"),
MASTER("master");
/** This should generally be the latest DEX VM fully supported. */
@@ -355,7 +358,7 @@
}
public static Version last() {
- return V13_0_0;
+ return V14_0_0;
}
public static Version master() {
@@ -630,6 +633,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_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")
@@ -645,6 +649,7 @@
ImmutableMap.<DexVm, String>builder()
.put(DexVm.ART_DEFAULT, "bin/art")
.put(DexVm.ART_MASTER_HOST, "bin/art")
+ .put(DexVm.ART_14_0_0_HOST, "bin/art")
.put(DexVm.ART_13_0_0_HOST, "bin/art")
.put(DexVm.ART_12_0_0_HOST, "bin/art")
.put(DexVm.ART_10_0_0_HOST, "bin/art")
@@ -660,6 +665,7 @@
private static final Map<DexVm, String> ART_BINARY_VERSIONS_X64 =
ImmutableMap.<DexVm, String>builder()
.put(DexVm.ART_DEFAULT, "bin/art")
+ .put(DexVm.ART_14_0_0_HOST, "bin/art")
.put(DexVm.ART_13_0_0_HOST, "bin/art")
.put(DexVm.ART_12_0_0_HOST, "bin/art")
.put(DexVm.ART_10_0_0_HOST, "bin/art")
@@ -694,6 +700,7 @@
ImmutableMap.Builder<DexVm, List<String>> builder = ImmutableMap.builder();
builder
.put(DexVm.ART_DEFAULT, ART_BOOT_LIBS)
+ .put(DexVm.ART_14_0_0_HOST, NEWER_ART_BOOT_LIBS)
.put(DexVm.ART_13_0_0_HOST, NEWER_ART_BOOT_LIBS)
.put(DexVm.ART_12_0_0_HOST, NEWER_ART_BOOT_LIBS)
.put(DexVm.ART_10_0_0_HOST, ART_BOOT_LIBS)
@@ -713,6 +720,7 @@
ImmutableMap.Builder<DexVm, String> builder = ImmutableMap.builder();
builder
.put(DexVm.ART_DEFAULT, "angler")
+ .put(DexVm.ART_14_0_0_HOST, "redfin")
.put(DexVm.ART_13_0_0_HOST, "redfin")
.put(DexVm.ART_12_0_0_HOST, "redfin")
.put(DexVm.ART_10_0_0_HOST, "coral")
@@ -746,6 +754,7 @@
case V12_0_0:
return base.resolve("host").resolve("art-12.0.0-beta4");
case V13_0_0:
+ case V14_0_0:
case MASTER:
return base.resolve("host").resolve("art-" + version);
default:
@@ -780,6 +789,7 @@
return "arm64";
case V12_0_0:
case V13_0_0:
+ case V14_0_0:
case MASTER:
return "x86_64";
default:
@@ -787,10 +797,6 @@
}
}
- private static Path getProductBootImagePath(DexVm vm) {
- return getProductPath(vm).resolve("system").resolve("framework").resolve("boot.art");
- }
-
public static byte[] getClassAsBytes(Class clazz) throws IOException {
return Files.readAllBytes(getClassFileForTestClass(clazz));
}
@@ -1073,6 +1079,8 @@
switch (dexVm.version) {
case MASTER:
return AndroidApiLevel.MASTER;
+ case V14_0_0:
+ return AndroidApiLevel.U;
case V13_0_0:
return AndroidApiLevel.T;
case V12_0_0:
diff --git a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
index cf867dd..df687ed 100644
--- a/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/androidapi/GenerateCovariantReturnTypeMethodsTest.java
@@ -68,7 +68,7 @@
Paths.get(ToolHelper.SOURCE_DIR)
.resolve(PACKAGE_NAME.replace('.', '/'))
.resolve(CLASS_NAME + ".java");
- private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.T;
+ private static final AndroidApiLevel GENERATED_FOR_API_LEVEL = AndroidApiLevel.U;
@Parameter public TestParameters parameters;
@@ -79,7 +79,7 @@
@Test
public void testLibCoreNeedsUpgrading() {
- assertEquals(GENERATED_FOR_API_LEVEL, AndroidApiLevel.LATEST);
+ assertEquals(GENERATED_FOR_API_LEVEL, AndroidApiLevel.API_DATABASE_LEVEL);
}
@Test
diff --git a/src/test/java/com/android/tools/r8/apimodel/ClassValueTest.java b/src/test/java/com/android/tools/r8/apimodel/ClassValueTest.java
index 091cff8..f247e38 100644
--- a/src/test/java/com/android/tools/r8/apimodel/ClassValueTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/ClassValueTest.java
@@ -68,7 +68,10 @@
.compile()
.inspect(this::computeValuePresent)
.run(parameters.getRuntime(), TestClass.class)
- .assertFailureWithErrorThatThrows(NoClassDefFoundError.class);
+ .applyIf(
+ parameters.runtimeWithClassValue(),
+ r -> r.assertSuccessWithOutput(EXPECTED_OUTPUT),
+ r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class));
}
@Test
@@ -83,7 +86,7 @@
.inspect(this::computeValueAbsent)
.run(parameters.getRuntime(), TestClass.class)
.applyIf(
- parameters.isCfRuntime(),
+ parameters.runtimeWithClassValue(),
r -> r.assertFailureWithErrorThatThrows(AbstractMethodError.class),
r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class));
}
@@ -132,7 +135,7 @@
.inspect(this::computeValueAbsent)
.run(parameters.getRuntime(), TestClass.class)
.applyIf(
- parameters.isCfRuntime(),
+ parameters.runtimeWithClassValue(),
r -> r.assertFailureWithErrorThatThrows(AbstractMethodError.class),
r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class));
}
@@ -177,7 +180,7 @@
.inspect(this::computeValuePresent)
.run(parameters.getRuntime(), TestClass.class)
.applyIf(
- parameters.isCfRuntime(),
+ parameters.runtimeWithClassValue(),
r -> r.assertSuccessWithOutput(EXPECTED_OUTPUT),
r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class));
}
diff --git a/src/test/java/com/android/tools/r8/cf/varhandle/VarHandleDesugaringInstanceObjectFieldTest.java b/src/test/java/com/android/tools/r8/cf/varhandle/VarHandleDesugaringInstanceObjectFieldTest.java
index 2673e46..13a5073 100644
--- a/src/test/java/com/android/tools/r8/cf/varhandle/VarHandleDesugaringInstanceObjectFieldTest.java
+++ b/src/test/java/com/android/tools/r8/cf/varhandle/VarHandleDesugaringInstanceObjectFieldTest.java
@@ -4,6 +4,7 @@
package com.android.tools.r8.cf.varhandle;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.examples.jdk9.VarHandle;
import com.android.tools.r8.utils.StringUtils;
import com.google.common.collect.ImmutableList;
@@ -73,6 +74,9 @@
@Override
protected String getExpectedOutputForArtImplementation() {
assert parameters.isDexRuntime();
- return StringUtils.lines(EXPECTED_OUTPUT.trim(), "Art implementation", "Art implementation");
+ return parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ ? StringUtils.lines(
+ EXPECTED_OUTPUT.trim(), "Reference implementation", "Reference implementation")
+ : StringUtils.lines(EXPECTED_OUTPUT.trim(), "Art implementation", "Art implementation");
}
}
diff --git a/src/test/java/com/android/tools/r8/debug/InterfaceMethodTest.java b/src/test/java/com/android/tools/r8/debug/InterfaceMethodTest.java
index 51e8ab2..7a73a31 100644
--- a/src/test/java/com/android/tools/r8/debug/InterfaceMethodTest.java
+++ b/src/test/java/com/android/tools/r8/debug/InterfaceMethodTest.java
@@ -47,9 +47,12 @@
@Test
public void testDefaultMethod() throws Throwable {
- // TODO(b/244683447): This test fails on ART 13 when checking current method in doSomething.
+ // TODO(b/244683447): This test fails on Art 13 and Art 14 when checking current method in
+ // doSomething.
assumeTrue(
- parameters.isCfRuntime() || !parameters.getDexRuntimeVersion().isEqualTo(Version.V13_0_0));
+ parameters.isCfRuntime()
+ || !(parameters.getDexRuntimeVersion().isEqualTo(Version.V13_0_0)
+ || parameters.getDexRuntimeVersion().isEqualTo(Version.V14_0_0)));
testForRuntime(parameters)
.addProgramFiles(JAR)
.run(parameters.getRuntime(), debuggeeClass)
diff --git a/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java b/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
index 901e412..2205c9c 100644
--- a/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
+++ b/src/test/java/com/android/tools/r8/debug/KotlinInlineTest.java
@@ -259,7 +259,9 @@
public void testNestedInlining() throws Throwable {
assumeTrue(
"b/244704042: Incorrect step-into StringBuilder.",
- parameters.isCfRuntime() || !parameters.getDexRuntimeVersion().isEqualTo(Version.V13_0_0));
+ parameters.isCfRuntime()
+ || !(parameters.getDexRuntimeVersion().isEqualTo(Version.V13_0_0)
+ || parameters.getDexRuntimeVersion().isEqualTo(Version.V14_0_0)));
// Count the number of lines in the source file. This is needed to check that inlined code
// refers to non-existing line numbers.
Path sourceFilePath =
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/MathBackportJava17Test.java b/src/test/java/com/android/tools/r8/desugar/backports/MathBackportJava17Test.java
index fde89f0..8f9332d 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/MathBackportJava17Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/MathBackportJava17Test.java
@@ -34,7 +34,6 @@
super(parameters, Math.class, TEST_JAR, "backport.MathBackportJava17Main");
// Math.absExact.
- // The exact number needs to be updated once we test Android U.
- registerTarget(AndroidApiLevel.U, 27);
+ registerTarget(AndroidApiLevel.U, 8);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/ObjectsBackportJava17Test.java b/src/test/java/com/android/tools/r8/desugar/backports/ObjectsBackportJava17Test.java
index d54a044..4a5345fe 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/ObjectsBackportJava17Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/ObjectsBackportJava17Test.java
@@ -35,7 +35,6 @@
public ObjectsBackportJava17Test(TestParameters parameters) {
super(parameters, Objects.class, TEST_JAR, TEST_CLASS);
// Objects.checkFromIndexSize, Objects.checkFromToIndex, Objects.checkIndex.
- // The exact number needs to be updated once we test Android U.
- registerTarget(AndroidApiLevel.U, 28);
+ registerTarget(AndroidApiLevel.U, 21);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/StreamBackportJava9Test.java b/src/test/java/com/android/tools/r8/desugar/backports/StreamBackportJava9Test.java
index 073c179..5e33276 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/StreamBackportJava9Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/StreamBackportJava9Test.java
@@ -34,12 +34,15 @@
public StreamBackportJava9Test(TestParameters parameters) {
super(parameters, Stream.class, TEST_JAR, "backport.StreamBackportJava9Main");
- // Note: None of the methods in this test exist in the latest android.jar. If/when they ship in
- // an actual API level, migrate these tests to StreamBackportTest.
+ // Note: The methods in this test exist from Android U. However, they are only available from
+ // Java 9. When tests build with Java 9 migrate to StreamBackportTest and add insert
+ // StreamBackportJava9Main as an inner class here.
// Available since N as part of library desugaring.
ignoreInvokes("of");
ignoreInvokes("empty");
ignoreInvokes("count");
+
+ registerTarget(AndroidApiLevel.U, 2);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/backports/StrictMathBackportJava17Test.java b/src/test/java/com/android/tools/r8/desugar/backports/StrictMathBackportJava17Test.java
index 3089d40..c93b1ee 100644
--- a/src/test/java/com/android/tools/r8/desugar/backports/StrictMathBackportJava17Test.java
+++ b/src/test/java/com/android/tools/r8/desugar/backports/StrictMathBackportJava17Test.java
@@ -33,7 +33,6 @@
public StrictMathBackportJava17Test(TestParameters parameters) {
super(parameters, StrictMath.class, TEST_JAR, "backport.StrictMathBackportJava17Main");
- // The exact number needs to be updated once we test Android U.
- registerTarget(AndroidApiLevel.U, 75);
+ registerTarget(AndroidApiLevel.U, 30);
}
}
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 16021f7..089553b 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
@@ -9,6 +9,7 @@
import com.android.tools.r8.SingleTestRunResult;
import com.android.tools.r8.TestParameters;
+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.StringUtils;
@@ -29,6 +30,11 @@
StringUtils.lines("2/3/01 4:05 AM - Feb 3, 1 4:05 AM");
private static final String expectedOutput =
StringUtils.lines("2/3/01, 4:05 AM - Feb 3, 1, 4:05 AM");
+ // From ICU 72, see https://android-review.git.corp.google.com/c/platform/libcore/+/2292140
+ private static final String expectedOutputDesugaredLibNNBSP =
+ StringUtils.lines("2/3/01 4:05\u202FAM - Feb 3, 1 4:05\u202FAM");
+ private static final String expectedOutputNNBSP =
+ StringUtils.lines("2/3/01, 4:05\u202FAM - Feb 3, 1, 4:05\u202FAM");
private final TestParameters parameters;
private final CompilationSpecification compilationSpecification;
@@ -61,9 +67,15 @@
.run(parameters.getRuntime(), TestClass.class)
.assertSuccess();
if (libraryDesugaringSpecification.hasTimeDesugaring(parameters)) {
- run.assertSuccessWithOutput(expectedOutputDesugaredLib);
+ run.assertSuccessWithOutput(
+ parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ ? expectedOutputDesugaredLibNNBSP
+ : expectedOutputDesugaredLib);
} else {
- run.assertSuccessWithOutput(expectedOutput);
+ run.assertSuccessWithOutput(
+ parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ ? expectedOutputNNBSP
+ : expectedOutput);
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
index 8b67b20..a2c95c1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdktests/Jdk11TimeAbstractTests.java
@@ -169,7 +169,6 @@
"test.java.time.TestOffsetTime",
"test.java.time.TestClock_Offset",
"test.java.time.TestPeriod",
- "test.java.time.TestClock_System",
"test.java.time.TestOffsetDateTime_instants",
"test.java.time.temporal.TestDateTimeBuilderCombinations",
"test.java.time.temporal.TestJulianFields",
@@ -180,6 +179,12 @@
new String[] {"tck.java.time.TestIsoChronology"};
static final String[] RAW_TEMPORAL_SUCCESSES_UP_TO_11 =
new String[] {"test.java.time.temporal.TestIsoWeekFields"};
+ static final String[] RAW_TEMPORAL_SUCCESSES_UP_TO_14 =
+ new String[] {
+ // Reflective lookup Class.forName("java.time.Clock$SystemClock").getDeclaredField("offset")
+ // fails.
+ "test.java.time.TestClock_System"
+ };
static final String[] FORMAT_CHRONO_SUCCESSES =
new String[] {
"test.java.time.format.TestFractionPrinterParser",
@@ -230,6 +235,10 @@
// In 12 some ISO is supported that other versions do not support.
Collections.addAll(allTests, RAW_TEMPORAL_SUCCESSES_UP_TO_11);
}
+ if (parameters.getDexRuntimeVersion().isOlderThan(Version.V14_0_0)) {
+ // In 14 some reflection used in test fails.
+ Collections.addAll(allTests, RAW_TEMPORAL_SUCCESSES_UP_TO_14);
+ }
// The bridge is always present with JDK11 due to partial desugaring between 26 and 33.
// On JDK8 the bridge is absent in between 26 and 33.
if (libraryDesugaringSpecification != JDK8
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
index 3b6ac61..9c36e69 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeInterfaceTest.java
@@ -77,7 +77,7 @@
public void testD8() throws Exception {
parameters.assumeDexRuntime();
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForD8()
.addProgramClassFileData(
dumpHost(),
@@ -111,8 +111,8 @@
@Test
public void testD8WithClasspathAndMerge() throws Exception {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
Path host =
testForD8()
@@ -199,8 +199,8 @@
@Test
public void testD8WithoutMembersOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
@@ -220,8 +220,8 @@
@Test
public void testD8WithoutHostOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
index b629ed8..36290f2 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeSuperTest.java
@@ -69,7 +69,7 @@
public void testD8() throws Exception {
parameters.assumeDexRuntime();
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForD8()
.addProgramClassFileData(dumpHost(), dumpMember(), dumpSubMember())
.setMinApi(parameters)
@@ -101,8 +101,8 @@
@Test
public void testD8WithClasspathAndMerge() throws Exception {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
Path host =
testForD8()
@@ -188,8 +188,8 @@
@Test
public void testD8WithoutMembersOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
@@ -209,8 +209,8 @@
@Test
public void testD8WithoutHostOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
index 6e516a4..9e2d0c0 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexRewriteInvokeVirtualTest.java
@@ -69,7 +69,7 @@
public void testD8() throws Exception {
parameters.assumeDexRuntime();
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForD8()
.addProgramClassFileData(dumpHost(), dumpMember1(), dumpMember2())
.setMinApi(parameters)
@@ -101,8 +101,8 @@
@Test
public void testD8WithClasspathAndMerge() throws Exception {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
Path host =
testForD8()
@@ -188,8 +188,8 @@
@Test
public void testD8WithoutMembersOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
@@ -209,8 +209,8 @@
@Test
public void testD8WithoutHostOnClasspath() {
assumeTrue(parameters.isDexRuntime());
- // TODO(sgjesse): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ // TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
assertThrows(
CompilationFailedException.class,
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
index 5bd24bf..4a1e82c 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingFieldsTest.java
@@ -81,7 +81,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -99,7 +99,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -121,7 +121,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PUBLIC), dumpMember1(ACC_PUBLIC), dumpMember2(ACC_PUBLIC))
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
index 8d924dc..eca6260 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexShrinkingMethodsTest.java
@@ -80,7 +80,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -98,7 +98,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PRIVATE), dumpMember1(ACC_PRIVATE), dumpMember2(ACC_PRIVATE))
@@ -120,7 +120,7 @@
parameters.assumeR8TestParameters();
assumeTrue(parameters.isDexRuntime() || isRuntimeWithNestSupport(parameters.asCfRuntime()));
// TODO(b/247047415): Update test when a DEX VM natively supporting nests is added.
- assertFalse(parameters.getApiLevel().getLevel() > 33);
+ assertFalse(parameters.getApiLevel().getLevel() > 34);
testForR8(parameters.getBackend())
.addProgramClassFileData(
dumpHost(ACC_PUBLIC), dumpMember1(ACC_PUBLIC), dumpMember2(ACC_PUBLIC))
diff --git a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexTest.java b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexTest.java
index 1c740a4..74ea12f 100644
--- a/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/nestaccesscontrol/NestAttributesInDexTest.java
@@ -13,6 +13,7 @@
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRunResult;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.desugar.nestaccesscontrol.NestAttributesInDexTest.Host.Member1;
import com.android.tools.r8.desugar.nestaccesscontrol.NestAttributesInDexTest.Host.Member2;
import com.android.tools.r8.transformers.ClassFileTransformer;
@@ -62,13 +63,18 @@
private void checkResult(TestRunResult<?> result) {
if (isRuntimeWithNestSupport(parameters.getRuntime())) {
result.assertSuccessWithOutput(EXPECTED_OUTPUT);
+ } else if (parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)) {
+ // TODO(b/247047415): Partial DEX support in Android U DP1 (reflective APIs).
+ result.assertSuccessWithOutput(R8_EXPECTED_OUTPUT);
} else {
result.assertFailureWithErrorThatThrows(NoSuchMethodError.class);
}
}
private void checkResultR8(TestRunResult<?> result) {
- if (isRuntimeWithNestSupport(parameters.getRuntime())) {
+ // TODO(b/247047415): Partial DEX support in Android U DP1 (reflective APIs).
+ if (parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ || isRuntimeWithNestSupport(parameters.getRuntime())) {
result.assertSuccessWithOutput(R8_EXPECTED_OUTPUT);
} else {
result.assertFailureWithErrorThatThrows(NoSuchMethodError.class);
diff --git a/src/test/java/com/android/tools/r8/desugar/sealed/PermittedSubclassesAttributeInDexTest.java b/src/test/java/com/android/tools/r8/desugar/sealed/PermittedSubclassesAttributeInDexTest.java
index 32cee2a..cc01489 100644
--- a/src/test/java/com/android/tools/r8/desugar/sealed/PermittedSubclassesAttributeInDexTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/sealed/PermittedSubclassesAttributeInDexTest.java
@@ -11,6 +11,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
import com.android.tools.r8.TestRuntime.CfVm;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.transformers.ClassFileTransformer;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -72,8 +73,11 @@
.compile()
.inspect(this::inspect)
.run(parameters.getRuntime(), TestClass.class)
- // No Art versions have support for sealed classes yet.
- .assertFailureWithErrorThatThrows(NoSuchMethodError.class);
+ .applyIf(
+ // TODO(b/270941147): Partial DEX support in Android U DP1 (reflective APIs).
+ parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0),
+ r -> r.assertSuccessWithOutput(EXPECTED_OUTPUT),
+ r -> r.assertFailureWithErrorThatThrows(NoSuchMethodError.class));
}
public Collection<byte[]> getTransformedClasses() throws Exception {
diff --git a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
index 475a8e7..c66a13d 100644
--- a/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
+++ b/src/test/java/com/android/tools/r8/graph/invokespecial/InvokeSpecialOnOtherInterfaceTest.java
@@ -44,7 +44,7 @@
.applyIf(
parameters.isCfRuntime(),
r -> r.assertFailureWithErrorThatThrows(VerifyError.class),
- !(parameters.isDexRuntimeVersion(Version.V13_0_0)
+ !(parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V13_0_0)
&& parameters.canUseDefaultAndStaticInterfaceMethods()),
r -> r.assertSuccessWithOutputLines("Hello World!"),
r -> r.assertFailureWithErrorThatThrows(NoSuchMethodError.class));
@@ -67,7 +67,7 @@
parameters.isDexRuntime() && !parameters.canUseDefaultAndStaticInterfaceMethods(),
r -> r.assertSuccessWithOutputLines("Hello World!"),
parameters.isDexRuntime()
- && !parameters.isDexRuntimeVersion(Version.V13_0_0)
+ && !parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V13_0_0)
&& parameters.canUseDefaultAndStaticInterfaceMethods(),
r -> r.assertFailureWithErrorThatThrows(NullPointerException.class),
r -> r.assertFailureWithErrorThatThrows(NoSuchMethodError.class));
diff --git a/src/test/java/com/android/tools/r8/ir/optimize/interfaces/OpenUninstantiatedInterfaceInstanceofTest.java b/src/test/java/com/android/tools/r8/ir/optimize/interfaces/OpenUninstantiatedInterfaceInstanceofTest.java
index 6765723..a53ca72 100644
--- a/src/test/java/com/android/tools/r8/ir/optimize/interfaces/OpenUninstantiatedInterfaceInstanceofTest.java
+++ b/src/test/java/com/android/tools/r8/ir/optimize/interfaces/OpenUninstantiatedInterfaceInstanceofTest.java
@@ -94,7 +94,7 @@
private List<String> getExpectedOutputLines() {
if (parameters.isDexRuntime()) {
if (parameters.getDexRuntimeVersion().isEqualTo(Version.V7_0_0)
- || parameters.getDexRuntimeVersion().isEqualTo(Version.V13_0_0)) {
+ || parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V13_0_0)) {
return ImmutableList.of("true");
}
}
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
index 61c7a61..15fccd2 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/KotlinReflectTest.java
@@ -99,6 +99,7 @@
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticMessages()
.allowUnusedDontWarnKotlinReflectJvmInternal(kotlinc.isNot(KOTLINC_1_3_72))
+ .allowUnusedDontWarnJavaLangClassValue()
.applyIf(
parameters.isCfRuntime() && kotlinParameters.isNewerThanOrEqualTo(KOTLINC_1_8_0),
TestShrinkerBuilder::addDontWarnJavaLangInvokeLambdaMetadataFactory)
diff --git a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
index 9a4c93a..32568f9 100644
--- a/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
+++ b/src/test/java/com/android/tools/r8/kotlin/reflection/ReflectiveConstructionWithInlineClassTest.java
@@ -108,7 +108,8 @@
.addKeepEnumsRule()
.addKeepAttributes(ProguardKeepAttributes.RUNTIME_VISIBLE_ANNOTATIONS)
.allowDiagnosticMessages()
- .allowUnusedDontWarnKotlinReflectJvmInternal();
+ .allowUnusedDontWarnKotlinReflectJvmInternal()
+ .allowUnusedDontWarnJavaLangClassValue();
}
@Test
diff --git a/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java b/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
index c67394a..3d3ed7f 100644
--- a/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/InvalidTypesTest.java
@@ -87,6 +87,7 @@
case V7_0_0:
case V13_0_0:
+ case V14_0_0:
return StringUtils.joinLines(
"Hello!",
"Unexpected outcome of checkcast",
diff --git a/third_party/android_jar/libcore_latest.tar.gz.sha1 b/third_party/android_jar/libcore_latest.tar.gz.sha1
index c300639..a4bef52 100644
--- a/third_party/android_jar/libcore_latest.tar.gz.sha1
+++ b/third_party/android_jar/libcore_latest.tar.gz.sha1
@@ -1 +1 @@
-f7570bec27977e786b637241778e6cfdadf25f7f
\ No newline at end of file
+a82e05e08874d8b869d7f614c24ef8981888c702
\ No newline at end of file
diff --git a/tools/linux/README.art-versions b/tools/linux/README.art-versions
index 611c06e..03ddaa3 100644
--- a/tools/linux/README.art-versions
+++ b/tools/linux/README.art-versions
@@ -65,6 +65,37 @@
(cd tools/linux/host; upload_to_google_storage.py -a --bucket r8-deps art-master)
+repo init -b udc-preview1-release
+
+art-14 (Android U)
+------------------
+Build branch udc-preview1-release.
+
+export BRANCH=udc-preview1-release
+mkdir ${BRANCH}
+cd ${BRANCH}
+export ANDROID_CHECKOUT=$(pwd)
+repo init -u https://android.googlesource.com/platform/manifest -b ${BRANCH}
+repo sync -cq -j48
+source build/envsetup.sh
+lunch aosp_redfin-userdebug
+m -j48
+m -j48 build-art
+m -j48 test-art-host
+repo manifest -r -o build_spec.xml
+
+Collected into tools/linux/host/art-14.0.0-dp1. The "host" path element is checked
+by the script for running Art.
+
+ cd <r8 checkout>
+ scripts/update-host-art.sh \
+ --android-checkout $ANDROID_CHECKOUT \
+ --art-dir host/art-14.0.0-dp1 \
+ --android-product redfin
+
+ (cd tools/linux/host; upload_to_google_storage.py -a --bucket r8-deps art-14.0.0-dp1)
+
+
art-13 (Android T)
------------------
Build branch android-13.0.0_r3.
@@ -86,10 +117,10 @@
cd <r8 checkout>
scripts/update-host-art.sh \
--android-checkout <...>/android-13.0.0_r3 \
- --art-dir host/art-13 \
+ --art-dir host/art-13.0.0 \
--android-product redfin
- (cd tools/linux/host; upload_to_google_storage.py -a --bucket r8-deps art-13)
+ (cd tools/linux/host; upload_to_google_storage.py -a --bucket r8-deps art-13.0.0)
art-12.0.0 (Android S)
---------------------
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
new file mode 100644
index 0000000..c88b923
--- /dev/null
+++ b/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1
@@ -0,0 +1 @@
+1c41f5d79e335ff132b7a95d995b65581c250df8
\ No newline at end of file
diff --git a/tools/test.py b/tools/test.py
index 72b2962..2f0254c 100755
--- a/tools/test.py
+++ b/tools/test.py
@@ -28,6 +28,7 @@
ALL_ART_VMS = [
"default",
+ "14.0.0",
"13.0.0",
"12.0.0",
"10.0.0",