[JS IR] Make tests that use directives pass with IR BE

This commit is contained in:
Sergej Jaskiewicz
2021-10-04 20:44:06 +03:00
committed by Space
parent a359e503fb
commit 65d40c2253
101 changed files with 415 additions and 217 deletions
@@ -2,7 +2,8 @@
// WITH_COROUTINES
// CHECK_BYTECODE_LISTING
// CHECK_NEW_COUNT: function=suspendHere count=0
// CHECK_NEW_COUNT: function=complexSuspend count=0
// FIXME: Coroutine inlining
// CHECK_NEW_COUNT: function=complexSuspend count=0 TARGET_BACKENDS=JS
import helpers.*
import kotlin.coroutines.*
import kotlin.coroutines.intrinsics.*
@@ -1,8 +1,12 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=bar1 count=6
// CHECK_IF_COUNT: function=bar1 count=0
// CHECK_CASES_COUNT: function=bar2 count=6
// CHECK_IF_COUNT: function=bar2 count=0
// CHECK_CASES_COUNT: function=bar1 count=6 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar1 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1 count=2 IGNORED_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar2 count=6 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar2 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=3 IGNORED_BACKENDS=JS
import kotlin.test.assertEquals
@@ -1,6 +1,8 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=bar count=3
// CHECK_IF_COUNT: function=bar count=0
// CHECK_CASES_COUNT: function=bar count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar count=2 IGNORED_BACKENDS=JS
import kotlin.test.assertEquals
@@ -1,5 +1,6 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=foo count=3
// CHECK_CASES_COUNT: function=foo count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=foo count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=foo count=0
import kotlin.test.assertEquals
@@ -1,8 +1,11 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=bar1 count=3
// CHECK_CASES_COUNT: function=bar1 count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar1 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1 count=0
// CHECK_CASES_COUNT: function=bar2 count=4
// CHECK_IF_COUNT: function=bar2 count=0
// CHECK_CASES_COUNT: function=bar2 count=4 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar2 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=3 IGNORED_BACKENDS=JS
import kotlin.test.assertEquals
@@ -1,5 +1,6 @@
// CHECK_CASES_COUNT: function=box$lambda count=0
// CHECK_IF_COUNT: function=box$lambda count=1
// CHECK_IF_COUNT: function=box$lambda count=1 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=box$lambda count=0 IGNORED_BACKENDS=JS
enum class Season {
WINTER,
@@ -1,5 +1,7 @@
// CHECK_CASES_COUNT: function=box count=6
// CHECK_IF_COUNT: function=box count=1
// CHECK_CASES_COUNT: function=box count=6 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=box count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=box count=1 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=box count=7 IGNORED_BACKENDS=JS
enum class En { A, B, C }
@@ -1,5 +1,7 @@
// CHECK_CASES_COUNT: function=box count=18
// CHECK_IF_COUNT: function=box count=3
// CHECK_CASES_COUNT: function=box count=18 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=box count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=box count=3 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=box count=21 IGNORED_BACKENDS=JS
enum class En { A, B, C }
@@ -1,5 +1,7 @@
// CHECK_CASES_COUNT: function=crash count=2
// CHECK_IF_COUNT: function=crash count=1
// CHECK_CASES_COUNT: function=crash count=2 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=crash count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=crash count=1 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=crash count=3 IGNORED_BACKENDS=JS
class EncapsulatedEnum<T : Enum<T>>(val value: T)
@@ -1,5 +1,7 @@
// CHECK_CASES_COUNT: function=doTheThing count=2
// CHECK_IF_COUNT: function=doTheThing count=2
// CHECK_CASES_COUNT: function=doTheThing count=2 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=doTheThing count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=doTheThing count=2 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=doTheThing count=4 IGNORED_BACKENDS=JS
private fun Any?.doTheThing(): String {
when (this) {
@@ -1,7 +1,10 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=bar1_u51tkt$ count=3
// CHECK_IF_COUNT: function=bar1_u51tkt$ count=0
// CHECK_CASES_COUNT: function=A$bar2$lambda count=3
// CHECK_CASES_COUNT: function=bar1_u51tkt$ count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar1_eni42q_k$ count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1_u51tkt$ count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1_eni42q_k$ count=3 IGNORED_BACKENDS=JS
// CHECK_CASES_COUNT: function=A$bar2$lambda count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=A$bar2$lambda count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=A$bar2$lambda count=0
import kotlin.test.assertEquals
@@ -1,6 +1,7 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=foo count=0
// CHECK_IF_COUNT: function=foo count=3
// CHECK_IF_COUNT: function=foo count=3 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=foo count=0 IGNORED_BACKENDS=JS
import kotlin.test.assertEquals
@@ -1,8 +1,12 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=bar1 count=3
// CHECK_IF_COUNT: function=bar1 count=0
// CHECK_CASES_COUNT: function=bar2 count=4
// CHECK_IF_COUNT: function=bar2 count=0
// CHECK_CASES_COUNT: function=bar1 count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar1 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar1 count=3 IGNORED_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar2 count=4 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=bar2 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=bar2 count=4 IGNORED_BACKENDS=JS
import kotlin.test.assertEquals
@@ -1,5 +1,6 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=foo count=3
// CHECK_CASES_COUNT: function=foo count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=foo count=4 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=foo count=0
import kotlin.test.assertEquals
@@ -1,6 +1,8 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=foo1 count=2
// CHECK_IF_COUNT: function=foo1 count=1
// CHECK_CASES_COUNT: function=foo1 count=2 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=foo1 count=5 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=foo1 count=1 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=foo1 count=0 IGNORED_BACKENDS=JS
// CHECK_CASES_COUNT: function=foo2 count=4
// CHECK_IF_COUNT: function=foo2 count=0
@@ -1,9 +1,14 @@
// CHECK_CASES_COUNT: function=test1 count=2
// CHECK_IF_COUNT: function=test1 count=0
// CHECK_BREAKS_COUNT: function=test1 count=1
// CHECK_CASES_COUNT: function=test1 count=2 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=test1 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=test1 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=test1 count=1 IGNORED_BACKENDS=JS
// CHECK_BREAKS_COUNT: function=test1 count=1 TARGET_BACKENDS=JS
// CHECK_BREAKS_COUNT: function=test1 count=0 IGNORED_BACKENDS=JS
// CHECK_CASES_COUNT: function=test2 count=2
// CHECK_IF_COUNT: function=test2 count=0
// CHECK_CASES_COUNT: function=test2 count=2 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=test2 count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=test2 count=0 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=test2 count=1 IGNORED_BACKENDS=JS
// CHECK_BREAKS_COUNT: function=test2 count=1
fun test1(v: Int) {
@@ -2,11 +2,14 @@
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=intFoo count=3
// CHECK_IF_COUNT: function=intFoo count=0
// CHECK_CASES_COUNT: function=shortFoo count=3
// CHECK_CASES_COUNT: function=shortFoo count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=shortFoo count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=shortFoo count=0
// CHECK_CASES_COUNT: function=byteFoo count=3
// CHECK_CASES_COUNT: function=byteFoo count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=byteFoo count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=byteFoo count=0
// CHECK_CASES_COUNT: function=charFoo count=3
// CHECK_CASES_COUNT: function=charFoo count=3 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=charFoo count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=charFoo count=0
fun intFoo(x: Int): Int {
@@ -1,7 +1,9 @@
// KJS_WITH_FULL_RUNTIME
// WITH_RUNTIME
// CHECK_CASES_COUNT: function=foo count=4
// CHECK_IF_COUNT: function=foo count=1
// CHECK_CASES_COUNT: function=foo count=4 TARGET_BACKENDS=JS
// CHECK_CASES_COUNT: function=foo count=0 IGNORED_BACKENDS=JS
// CHECK_IF_COUNT: function=foo count=1 TARGET_BACKENDS=JS
// CHECK_IF_COUNT: function=foo count=0 IGNORED_BACKENDS=JS
var log = ""
@@ -8,7 +8,8 @@ inline fun inlineFun(crossinline inlineLambda: () -> String = { "OK" }, noinline
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=box$lambda scope=box IGNORED_BACKENDS=JS
import test.*
fun box(): String {
@@ -1,6 +1,7 @@
// SKIP_INLINE_CHECK_IN: inlineFun$default
// FILE: 1.kt
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test TARGET_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: test_0_k$ except=_get_value__0_k$ IGNORED_BACKENDS=JS
package test
//problem in test framework
@@ -9,7 +9,8 @@ inline fun inlineFun(capturedParam: String, noinline lambda: () -> String = { ca
fun call(lambda: () -> String ) = lambda()
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=box$lambda scope=box IGNORED_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=call scope=box
import test.*
@@ -8,7 +8,7 @@ inline fun inlineFun(crossinline inlineLambda: () -> String, noinline noInlineLa
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=inlineFun
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=inlineFun TARGET_BACKENDS=JS
import test.*
fun box(): String {
@@ -9,8 +9,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String = { this }): String
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box TARGET_BACKENDS=JS
import test.*
@@ -9,8 +9,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String, crossinline dlambd
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=test
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=test
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=test TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=test TARGET_BACKENDS=JS
import test.*
fun String.test(): String = "INLINE".inlineFun({ this })
@@ -13,8 +13,8 @@ class A(val value: String) {
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=box
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=box
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=box TARGET_BACKENDS=JS
import test.*
fun box(): String {
@@ -13,8 +13,8 @@ class A(val value: String) {
// FILE: 2.kt
//WIH_RUNTIME
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=test
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=test
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=test TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=test TARGET_BACKENDS=JS
import test.*
fun String.test(): String = with(A("VALUE")) { "INLINE".inlineFun({ this@test }) }
@@ -7,7 +7,8 @@ inline fun inlineFun(capturedParam: String, lambda: () -> Any = { capturedParam
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType TARGET_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: box except=THROW_CCE;isObject IGNORED_BACKENDS=JS
import test.*
@@ -7,7 +7,8 @@ inline fun inlineFun(lambda: () -> Any = { "OK" as Any }): Any {
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType
// CHECK_CONTAINS_NO_CALLS: box except=throwCCE;isType TARGET_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: box except=THROW_CCE;isObject IGNORED_BACKENDS=JS
import test.*
@@ -11,7 +11,8 @@ inline fun <T : A> inlineFun(capturedParam: T, lambda: () -> T = { capturedParam
}
// FILE: 2.kt
// CHECK_CONTAINS_NO_CALLS: box
// CHECK_CONTAINS_NO_CALLS: box TARGET_BACKENDS=JS
// CHECK_CONTAINS_NO_CALLS: box except=_get_value__0_k$ IGNORED_BACKENDS=JS
import test.*
@@ -11,8 +11,8 @@ inline fun String.inlineFun(crossinline lambda: () -> String = { { this }() }):
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=inlineFun$lambda_0 scope=box TARGET_BACKENDS=JS
import test.*
@@ -14,8 +14,8 @@ class A(val value: String) {
}
// FILE: 2.kt
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=box
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=box
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda scope=box TARGET_BACKENDS=JS
// CHECK_CALLED_IN_SCOPE: function=A$inlineFun$lambda_0 scope=box TARGET_BACKENDS=JS
import test.*
fun box(): String {