JVM IR: Make inlining in $default stubs compatible with the JVM BE

The JVM BE inlines calls to the underlying function in a $default stub
verbatim, e.g., without renaming LVT entries or regenerating anonymous
objects. This commit introduces the same behavior in the JVM IR BE.

Fixes KT-36769.
This commit is contained in:
Steven Schäfer
2020-09-14 18:14:20 +02:00
committed by max-kammerer
parent bef0437edb
commit 5e27d9b089
10 changed files with 66 additions and 56 deletions
-9
View File
@@ -29,12 +29,6 @@ fun box(): String {
return "OK"
}
// JVM_IR steps on line 15 both on the way in and on the way out
// of the massert method. This is consistent with what would
// happen if massert was not inline and we used force-step-into
// to step through the $default method. JVM only hits line 15 on
// the way in.
// LINENUMBERS
// test.kt:24 box
// test.kt:15 box
@@ -43,9 +37,6 @@ fun box(): String {
// test.kt:16 box
// test.kt:17 box
// test.kt:21 box
// LINENUMBERS JVM_IR
// test.kt:15 box
// LINENUMBERS
// test.kt:25 box
// test.kt:6 box
// test.kt:3 getMASSERTIONS_ENABLED
@@ -11,11 +11,6 @@ fun foo(i: Int = 1) {
inline fun bar(i: Int = 1) {
}
// The JVM_IR backend has line number 11 for the inlined
// default argument handling both before and after the actual
// body of bar. That is consistent with what happens with the
// $default method in the non-inlined case.
// FORCE_STEP_INTO
// LINENUMBERS
// test.kt:4 box
@@ -25,7 +20,4 @@ inline fun bar(i: Int = 1) {
// test.kt:5 box
// test.kt:11 box
// test.kt:12 box
// LINENUMBERS JVM_IR
// test.kt:11 box
// LINENUMBERS
// test.kt:6 box
@@ -1,4 +1,4 @@
// IGNORE_BACKEND: JVM_IR
// FILE: test.kt
inline fun foo(stringMaker: () -> String = { "OK" }): String {
return stringMaker()
@@ -17,19 +17,6 @@ fun box(): String {
return "OK"
}
// The IR Backend does the following:
// test.kt:15
// test.kt:3
// test.kt:4
// test.kt:3
// test.kt:3 <---
// test.kt:16
// test.kt:7
// test.kt:11
// test.kt:8
// test.kt:7 <---
// test.kt:17
// LINENUMBERS
// test.kt:15 box
// test.kt:3 box
@@ -13,18 +13,11 @@ fun box(): String {
return ifoo2()
}
// JVM_IR backend has the same stepping behavior as
// the non-inlined case when using force step into to step
// through $default method. JVM does not.
// FORCE_STEP_INTO
// LINENUMBERS
// test.kt:12 box
// test.kt:3 box
// test.kt:4 box
// LINENUMBERS JVM_IR
// test.kt:3 box
// LINENUMBERS
// test.kt:13 box
// test.kt:7 ifoo2$default (synthetic)
// test.kt:8 ifoo2