Switch default JVM target to 1.8

#KT-29405 Fixed
This commit is contained in:
Alexander Udalov
2021-01-21 17:12:46 +01:00
parent 509ed64917
commit d022bb0248
52 changed files with 247 additions and 164 deletions
@@ -1,5 +1,6 @@
// TARGET_BACKEND: JVM
// WITH_RUNTIME
// JVM_TARGET: 1.6
@Target(AnnotationTarget.TYPE)
annotation class A
@@ -0,0 +1,71 @@
// !LANGUAGE: +FunctionTypesWithBigArity
// WITH_RUNTIME
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.6
// FILE: J.java
// import kotlin.jvm.functions.Arity;
import kotlin.jvm.functions.FunctionN;
import kotlin.Unit;
import java.util.Arrays;
public class J {
// TODO: uncomment arity as soon as Arity is introduced
public static void test(/* @Arity(30) */ FunctionN<Unit> f) {
Object o = new Object();
for (int i = 0; i < 42; i++) {
if (i == 30) continue;
Object[] args = new Object[i];
Arrays.fill(args, o);
try {
f.invoke(args);
} catch (IllegalArgumentException e) {
// OK
if (!e.getMessage().contains("30")) {
throw new AssertionError("Exception must specify the expected number of arguments: " + e.getMessage(), e);
}
continue;
} catch (Throwable e) {
throw new AssertionError(
"Incorrect exception (IllegalArgumentException expected): " + e.getClass().getName() + ", i = " + i, e
);
}
throw new AssertionError("IllegalArgumentException expected, but nothing was thrown, i = " + i);
}
}
}
// FILE: K.kt
fun foo(
p00: Any?, p01: Any?, p02: Any?, p03: Any?, p04: Any?, p05: Any?, p06: Any?, p07: Any?, p08: Any?, p09: Any?,
p10: Any?, p11: Any?, p12: Any?, p13: Any?, p14: Any?, p15: Any?, p16: Any?, p17: Any?, p18: Any?, p19: Any?,
p20: Any?, p21: Any?, p22: Any?, p23: Any?, p24: Any?, p25: Any?, p26: Any?, p27: Any?, p28: Any?, p29: Any?
) {}
class Fun : (Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?,
Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?) -> Unit {
override fun invoke(
p00: Any?, p01: Any?, p02: Any?, p03: Any?, p04: Any?, p05: Any?, p06: Any?, p07: Any?, p08: Any?, p09: Any?,
p10: Any?, p11: Any?, p12: Any?, p13: Any?, p14: Any?, p15: Any?, p16: Any?, p17: Any?, p18: Any?, p19: Any?,
p20: Any?, p21: Any?, p22: Any?, p23: Any?, p24: Any?, p25: Any?, p26: Any?, p27: Any?, p28: Any?, p29: Any?
) {}
}
fun box(): String {
val lambda: Function30<
Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?,
Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?,
Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?, Any?,
Unit> = { _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _ -> }
@Suppress("DEPRECATION_ERROR")
J.test(lambda as kotlin.jvm.functions.FunctionN<Unit>)
@Suppress("DEPRECATION_ERROR")
J.test(::foo as kotlin.jvm.functions.FunctionN<Unit>)
@Suppress("DEPRECATION_ERROR")
J.test(Fun() as kotlin.jvm.functions.FunctionN<Unit>)
return "OK"
}
@@ -1,6 +1,7 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM
// WITH_REFLECT
// JVM_TARGET: 1.6
import kotlin.reflect.KClass
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
interface I
class C : I { fun foo() = super<I>.hashCode() }
@@ -0,0 +1,11 @@
// TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// JVM_TARGET: 1.6
interface I
class C : I { fun foo() = super<I>.hashCode() }
fun box(): String {
C().foo()
return "OK"
}
@@ -0,0 +1,11 @@
// IGNORE_BACKEND: JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
fun foo() {
val x: Int? = 6
val hc = x!!.hashCode()
}
// 1 java/lang/Integer.hashCode \(I\)I
// 0 java/lang/Integer.valueOf
// 0 intValue
@@ -4,4 +4,4 @@ fun box(): String {
return "OK"
}
// 1 INVOKESTATIC java/lang/Integer.valueOf
// 0 INVOKESTATIC java/lang/Integer.valueOf
@@ -15,9 +15,6 @@ fun foo() {
val b = arrayOfNulls<Int>(4)
b[100] = 5
val x: Int? = 6
val hc = x!!.hashCode()
val y: Int? = 7
val z: Int? = 8
val res = y === z
@@ -26,5 +23,5 @@ fun foo() {
val c2: Any = if (1 != one) 0 else "abc"
}
// 9 java/lang/Integer.valueOf
// 8 java/lang/Integer.valueOf
// 0 intValue
@@ -1,3 +1,5 @@
// JVM_TARGET: 1.6
fun box(): String {
true.hashCode()
1.toByte().hashCode()
@@ -9,7 +9,7 @@ inline class UInt(val value: Int)
fun test(u1: UInt, u2: UInt) {
val a = u1.value
val b = u1.value.hashCode() // box int to call hashCode
val b = u1.value.hashCode()
val c = u1.value + u2.value
}
@@ -18,5 +18,5 @@ fun test(u1: UInt, u2: UInt) {
// 0 INVOKESTATIC UInt\$Erased.box
// 0 INVOKEVIRTUAL UInt.unbox
// 1 valueOf
// 0 intValue
// 0 valueOf
// 0 intValue
@@ -1,4 +1,5 @@
// WITH_RUNTIME
// JVM_TARGET: 1.6
val ua = 1234U
val ub = 5678U