[JS IR] Fix inline functions call graph in IC

Add a dependency for inline function references,
 because in some cases the references may be inlined.

^KT-55144 Fixed
This commit is contained in:
Alexander Korepanov
2022-11-25 17:51:51 +01:00
committed by Space Team
parent c31705240a
commit d8ab9498ab
28 changed files with 237 additions and 11 deletions
@@ -0,0 +1,5 @@
private val prop = "0"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,5 @@
private val prop = "1"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
val x = "10"
}
private inline fun bar() = Obj.x
internal inline fun foo(lambda: () -> String = ::bar): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
val x = "11"
}
private inline fun bar() = Obj.x
internal inline fun foo(lambda: () -> String = ::bar): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
inline val x get() = "12"
}
private inline fun bar() = Obj.x
internal inline fun foo(lambda: () -> String = ::bar): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
inline val x get() = "13"
}
private inline fun bar() = Obj.x
internal inline fun foo(lambda: () -> String = ::bar): String {
return lambda()
}
@@ -0,0 +1,5 @@
private val prop get() = "2"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,5 @@
private fun prop() = "3"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,5 @@
private fun prop() = "3"
internal inline fun foo(lambda: () -> String = { "4" }): String {
return lambda()
}
@@ -0,0 +1,3 @@
internal inline fun foo(lambda: () -> String = { "5" }): String {
return lambda()
}
@@ -0,0 +1,5 @@
private inline fun prop() = "6"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,5 @@
private inline fun prop() = "7"
internal inline fun foo(lambda: () -> String = ::prop): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
val x = "8"
override fun toString() = x
}
internal inline fun foo(lambda: () -> String = { "$Obj" } ): String {
return lambda()
}
@@ -0,0 +1,9 @@
private object Obj {
val x = "9"
override fun toString() = x
}
internal inline fun foo(lambda: () -> String = { "$Obj" } ): String {
return lambda()
}
@@ -0,0 +1,7 @@
fun box(stepId: Int): String {
val x = foo().toInt()
if (x != stepId) {
return "Fail $x != $stepId"
}
return "OK"
}
@@ -0,0 +1,65 @@
STEP 0:
modifications:
U : f.0.kt -> f.kt
added file: m.kt, f.kt
STEP 1:
modifications:
U : f.1.kt -> f.kt
modified ir: f.kt
STEP 2:
modifications:
U : f.2.kt -> f.kt
modified ir: f.kt
STEP 3:
modifications:
U : f.3.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 4:
modifications:
U : f.4.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 5:
modifications:
U : f.5.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 6:
modifications:
U : f.6.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 7:
modifications:
U : f.7.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 8:
modifications:
U : f.8.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 9:
modifications:
U : f.9.kt -> f.kt
modified ir: f.kt
STEP 10:
modifications:
U : f.10.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 11:
modifications:
U : f.11.kt -> f.kt
modified ir: f.kt
STEP 12:
modifications:
U : f.12.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
STEP 13:
modifications:
U : f.13.kt -> f.kt
modified ir: f.kt
updated imports: m.kt
@@ -0,0 +1,5 @@
MODULES: main
STEP 0..13:
libs: main
dirty js: main