Inliner: fixed bug with generic function reference + test

Fixes issue https://github.com/JetBrains/kotlin-native/issues/2336
This commit is contained in:
Igor Chevdar
2018-11-21 12:44:40 +03:00
parent 6fe37a00c5
commit d6091c93a1
3 changed files with 26 additions and 0 deletions
@@ -359,6 +359,8 @@ private class Inliner(val globalSubstituteMap: MutableMap<DeclarationDescriptor,
}
}
assert(unboundIndex == valueParameters.size) { "Not all arguments of <invoke> are used" }
for (index in 0 until functionArgument.typeArgumentsCount)
putTypeArgument(index, functionArgument.getTypeArgument(index))
}
return owner.visitCall(super.visitCall(immediateCall) as IrCall, Ref(false))
}
+5
View File
@@ -2586,6 +2586,11 @@ task inline_localObjectReturnedFromWhen(type: RunKonanTest) {
source = "codegen/inline/localObjectReturnedFromWhen.kt"
}
task inline_genericFunctionReference(type: RunKonanTest) {
goldValue = "0\n"
source = "codegen/inline/genericFunctionReference.kt"
}
task classDeclarationInsideInline(type: RunKonanTest) {
source = "codegen/inline/classDeclarationInsideInline.kt"
goldValue = "test1: 1.0\n1\ntest2\n"
@@ -0,0 +1,19 @@
/*
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
package codegen.inline.genericFunctionReference
import kotlin.test.*
class Z<T>(val x: T)
inline fun<T, R> foo(x: T, f: (T) -> R): R {
return f(x)
}
@Test fun runTest() {
val arr = Array(1) { foo(it, ::Z) }
println(arr[0].x)
}