Internally allow compilation of classfile version 66
This CL does not extend the compiler with support for version 21.
The version of ASM bundled with R8 does not have v21 support yet
and compilation will still fail for that version of ASM.
Bug: b/301189814
Change-Id: I76ca2323c56c5a6b5dbf3c50ba22c294f54a31c4
diff --git a/src/main/java/com/android/tools/r8/cf/CfVersion.java b/src/main/java/com/android/tools/r8/cf/CfVersion.java
index f69e532..c85f50f 100644
--- a/src/main/java/com/android/tools/r8/cf/CfVersion.java
+++ b/src/main/java/com/android/tools/r8/cf/CfVersion.java
@@ -46,6 +46,8 @@
public static final CfVersion V20_PREVIEW = new CfVersion(Opcodes.V20 | Opcodes.V_PREVIEW);
public static final CfVersion V21 = new CfVersion(Opcodes.V21);
public static final CfVersion V21_PREVIEW = new CfVersion(Opcodes.V21 | Opcodes.V_PREVIEW);
+ public static final CfVersion V22 = new CfVersion(66);
+ public static final CfVersion V22_PREVIEW = new CfVersion(66 | Opcodes.V_PREVIEW);
private final int version;
diff --git a/src/main/java/com/android/tools/r8/utils/InternalOptions.java b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
index 3ea71fd..38bb45b 100644
--- a/src/main/java/com/android/tools/r8/utils/InternalOptions.java
+++ b/src/main/java/com/android/tools/r8/utils/InternalOptions.java
@@ -174,7 +174,7 @@
}
}
- public static final CfVersion SUPPORTED_CF_VERSION = CfVersion.V21;
+ public static final CfVersion SUPPORTED_CF_VERSION = CfVersion.V22;
public static final int SUPPORTED_DEX_VERSION =
AndroidApiLevel.LATEST.getDexVersion().getIntValue();
diff --git a/src/test/java/com/android/tools/r8/cf/ClassFileVersion66Test.java b/src/test/java/com/android/tools/r8/cf/ClassFileVersion66Test.java
new file mode 100644
index 0000000..d97f14c
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/cf/ClassFileVersion66Test.java
@@ -0,0 +1,53 @@
+// Copyright (c) 2023, 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.
+
+package com.android.tools.r8.cf;
+
+import com.android.tools.r8.CompilationFailedException;
+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 org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+@RunWith(Parameterized.class)
+public class ClassFileVersion66Test extends TestBase {
+
+ static final String EXPECTED = StringUtils.lines("Hello, world");
+
+ private final TestParameters parameters;
+
+ @Parameterized.Parameters(name = "{0}")
+ public static TestParametersCollection data() {
+ return getTestParameters()
+ .withDefaultRuntimes()
+ .enableApiLevelsForCf()
+ .withApiLevel(AndroidApiLevel.B)
+ .build();
+ }
+
+ public ClassFileVersion66Test(TestParameters parameters) {
+ this.parameters = parameters;
+ }
+
+ // TODO(b/301189814): Update ASM once it has a release with v22 support.
+ @Test(expected = CompilationFailedException.class)
+ public void test() throws Exception {
+ testForD8(parameters.getBackend())
+ .addProgramClassFileData(transformer(TestClass.class).setVersion(CfVersion.V22).transform())
+ .setMinApi(parameters)
+ .run(parameters.getRuntime(), TestClass.class)
+ .assertSuccessWithOutput(EXPECTED);
+ }
+
+ static class TestClass {
+
+ public static void main(String[] args) {
+ System.out.println("Hello, world");
+ }
+ }
+}