Erase non-reified type parameters by-default when inlining.
Substitution of type arguments to non-reified type parameters may lead to accidental reification, which should not be done (see ^KT-60174 for examples). So, we should erase them, except the few cases. ^KT-60174: Fixed ^KT-60175: Fixed
This commit is contained in:
committed by
Space Team
parent
29ecc4d987
commit
f318b5969d
+8
-2
@@ -1,4 +1,10 @@
|
||||
// WITH_STDLIB
|
||||
|
||||
fun box(): String =
|
||||
if (listOf("abc", "de", "f").map(String::length) == listOf(3, 2, 1)) "OK" else "Fail"
|
||||
val String.myLength get() = this.length
|
||||
|
||||
fun box(): String {
|
||||
if (listOf("abc", "de", "f").map(String::length) != listOf(3, 2, 1)) return "Fail 1"
|
||||
if (listOf("abc", "de", "f").map(String::myLength) != listOf(3, 2, 1)) return "Fail 2"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
|
||||
-1
@@ -1,5 +1,4 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_INLINER: IR
|
||||
// WITH_STDLIB
|
||||
|
||||
package test
|
||||
|
||||
Vendored
-1
@@ -1,7 +1,6 @@
|
||||
// WITH_REFLECT
|
||||
// KJS_WITH_FULL_RUNTIME
|
||||
// IGNORE_BACKEND: WASM
|
||||
// IGNORE_INLINER: IR
|
||||
package test
|
||||
|
||||
import kotlin.reflect.*
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 12_559
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 12_814
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 4_526
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 2_640
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 38_992
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 41_349
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 4_552
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 9_847
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 13_922
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 14_178
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 5_081
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 4_317
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 17_619
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 17_907
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 4_398
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 5_841
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 12_601
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 12_856
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: mjs 4_398
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 3_743
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// TARGET_BACKEND: WASM
|
||||
|
||||
// RUN_THIRD_PARTY_OPTIMIZER
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 13_109
|
||||
// WASM_DCE_EXPECTED_OUTPUT_SIZE: wasm 13_362
|
||||
// WASM_OPT_EXPECTED_OUTPUT_SIZE: 3_900
|
||||
|
||||
interface I {
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
// IGNORE_BACKEND: WASM
|
||||
// https://youtrack.jetbrains.com/issue/KT-44571/Segfault-on-unnecessary-int-unboxing
|
||||
// IGNORE_NATIVE: optimizationMode=DEBUG
|
||||
// IGNORE_NATIVE: optimizationMode=NO
|
||||
// NO_CHECK_LAMBDA_INLINING
|
||||
// FILE: 1.kt
|
||||
package test
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> f(arr: Array<T>, func: (T) -> Int): Int = func(arr[0])
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box(): String = ('O' + f(arrayOf(""), String::length)).toString() + "K"
|
||||
@@ -0,0 +1,13 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(): String {
|
||||
var arr: Array<T> = Array(1) { Any() } as Array<T>
|
||||
arr[0] = bar()
|
||||
return arr[0] as String
|
||||
}
|
||||
|
||||
fun <T> bar(): T = "OK" as T
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>()
|
||||
@@ -0,0 +1,11 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(): String {
|
||||
return bar<T>()!!.toString()
|
||||
}
|
||||
|
||||
fun <T> bar(): T = "OK" as T
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>()
|
||||
@@ -0,0 +1,12 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
return with(object {
|
||||
fun T.bar() = this
|
||||
}) { (x as T).bar() } as String
|
||||
}
|
||||
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("OK")
|
||||
@@ -0,0 +1,11 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
return { y: T -> "OK" }.invoke(x as T)
|
||||
}
|
||||
|
||||
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("")
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
inline fun <T> foo(): String {
|
||||
val x: T by ""
|
||||
return x as String
|
||||
}
|
||||
|
||||
operator fun <T> String.getValue(nothing: Any?, property: KProperty<*>) = "OK" as T
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>()
|
||||
@@ -0,0 +1,11 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
return object {
|
||||
val y: T = x as T
|
||||
}.y as String
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("OK")
|
||||
@@ -0,0 +1,10 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
val y: T = x as T
|
||||
return y as String
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("OK")
|
||||
@@ -0,0 +1,11 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
return object {
|
||||
fun bar(): T = x as T
|
||||
}.bar() as String
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("OK")
|
||||
@@ -0,0 +1,11 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T> foo(x: Any?): String {
|
||||
return object {
|
||||
fun bar(y: T) = y as String
|
||||
}.bar(x as T)
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box() = foo<Int>("OK")
|
||||
@@ -0,0 +1,15 @@
|
||||
// FILE: 1.kt
|
||||
|
||||
inline fun <T: Unit?> myrun(block: () -> T) = block()
|
||||
|
||||
// FILE: 2.kt
|
||||
|
||||
fun box(): String {
|
||||
var x = "Fail"
|
||||
myrun L@{
|
||||
if (false) return@L Unit
|
||||
x = "OK"
|
||||
null
|
||||
}
|
||||
return x
|
||||
}
|
||||
+8
-8
@@ -12,14 +12,14 @@ MODULE main
|
||||
+ 2 1.kt
|
||||
_1Kt
|
||||
*L
|
||||
1#1,18:1
|
||||
8#2,2:19
|
||||
1#1,16:1
|
||||
6#2,2:17
|
||||
*S KotlinDebug
|
||||
*F
|
||||
+ 1 2.kt
|
||||
_2Kt
|
||||
*L
|
||||
16#1:19,2
|
||||
14#1:17,2
|
||||
*E
|
||||
} )
|
||||
K2
|
||||
@@ -33,15 +33,15 @@ MODULE main
|
||||
+ 2 1.kt
|
||||
_1Kt
|
||||
*L
|
||||
1#1,18:1
|
||||
8#2:19
|
||||
7#2,3:20
|
||||
1#1,16:1
|
||||
6#2:17
|
||||
5#2,3:18
|
||||
*S KotlinDebug
|
||||
*F
|
||||
+ 1 2.kt
|
||||
_2Kt
|
||||
*L
|
||||
16#1:19
|
||||
16#1:20,3
|
||||
14#1:17
|
||||
14#1:18,3
|
||||
*E
|
||||
} )
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
// IGNORE_INLINER: IR
|
||||
// IGNORE_BACKEND: WASM
|
||||
// JVM_ABI_K1_K2_DIFF: KT-62464
|
||||
|
||||
// FILE: 1.kt
|
||||
|
||||
Reference in New Issue
Block a user