JVM_IR: fix parallel compilation
Non-static inline functions that return inline classes need to be tracked when copying files for by-file lowering. FIXED: KT-45680
This commit is contained in:
committed by
teamcityserver
parent
594cc29dd2
commit
40872dd4ca
+6
@@ -18420,6 +18420,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineInCompanion.kt")
|
||||
public void testInlineInCompanion() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineInCompanion.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
||||
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
||||
|
||||
@@ -185,6 +185,13 @@ class JvmBackendContext(
|
||||
functionSymbolMap[staticReplacement.symbol] = newStaticReplacement.symbol
|
||||
}
|
||||
|
||||
for ((methodReplacement, original) in inlineClassReplacements.originalFunctionForMethodReplacement) {
|
||||
if (methodReplacement !is IrSimpleFunction) continue
|
||||
val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
|
||||
val newMethodReplacement = inlineClassReplacements.getReplacementFunction(newOriginal) ?: continue
|
||||
functionSymbolMap[methodReplacement.symbol] = newMethodReplacement.symbol
|
||||
}
|
||||
|
||||
for ((original, suspendView) in suspendFunctionOriginalToView) {
|
||||
val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
|
||||
val newSuspendView = suspendFunctionOriginalToView[newOriginal] ?: continue
|
||||
|
||||
+2
@@ -45,6 +45,7 @@ class MemoizedInlineClassReplacements(
|
||||
private val propertyMap = ConcurrentHashMap<IrPropertySymbol, IrProperty>()
|
||||
|
||||
internal val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
|
||||
internal val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
|
||||
|
||||
/**
|
||||
* Get a replacement for a function or a constructor.
|
||||
@@ -181,6 +182,7 @@ class MemoizedInlineClassReplacements(
|
||||
|
||||
private fun createMethodReplacement(function: IrFunction): IrSimpleFunction =
|
||||
buildReplacement(function, function.origin) {
|
||||
originalFunctionForMethodReplacement[this] = function
|
||||
require(function.dispatchReceiverParameter != null && function is IrSimpleFunction)
|
||||
dispatchReceiverParameter = function.dispatchReceiverParameter?.copyTo(this, index = -1)
|
||||
extensionReceiverParameter = function.extensionReceiverParameter?.copyTo(this, index = -1, name = Name.identifier("\$receiver"))
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
// TARGET_BACKEND: JVM_IR
|
||||
// WITH_RUNTIME
|
||||
// FILE: R.kt
|
||||
import kotlin.jvm.JvmInline
|
||||
|
||||
@JvmInline
|
||||
value class R(val value: String) {
|
||||
companion object {
|
||||
inline fun ok() = R("OK")
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun box(): String = R.ok().value
|
||||
|
||||
|
||||
+6
@@ -18420,6 +18420,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineFunctionInsideInlineClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("inlineInCompanion.kt")
|
||||
public void testInlineInCompanion() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineInCompanion.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
||||
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user