Inline function have several more dimensions of declaration changes, compared to normal ones.
In klib compatibility model, we need to answer what happens in all these cases.
In jvm compatibility mode, there are effectively no inline functions on link-time (except corner cases like calling from java and inline override). , but in that cases, inline functions already behaves as normal ones. So they can't be changed, and this makes mental model much easier.
For example, what this non-local return even mean, when l is noinline?
// MODULE: lib // FILE: lib.kt // version: v1 inline fun foo(l: () -> Unit) { l() } // version: v2 inline fun foo(noinline l: () -> Unit) { l() } // MODULE: other // FILE: other.kt // compile("lib:v1") fun test() { foo { return } } // MODULE: app // compile("other") // compile("lib:v2") fun main() { test() // Will it link? }