blob: 1452d9fbbb41c0825011edb54e093e95c33bc150 [file] [log] [blame] [view]
# Inline functions can refer unavailable declarations
```kotlin
// libA
fun fooA() = 5
// libB: implementation depends on libA
inline fun fooB() = fooA()
// libC: implementation depends on libB, but not libA
fun fooC() = fooB()
```
There is a problem, while inlining `fooB` to `fooC`.
It contains call to `fooA`, but `fooA` doesn't exist for `fooC` compilation.
For jvm it is not a problem, as it would inline `invokestatic libAKt.foo` as is, without
trying to understand what does it mean.
For current non-jvm it is not a problem, as it has all transitive dependencies at inlining time.
Unfortunately, if trying to inline on compile time over IR it would be the same problem as in klibs.
And even worse, as jvm compilation doesn't (and can't) have IrLinker to fix this symbols later.