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");
|
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
|
@Test
|
||||||
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
||||||
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
||||||
|
|||||||
@@ -185,6 +185,13 @@ class JvmBackendContext(
|
|||||||
functionSymbolMap[staticReplacement.symbol] = newStaticReplacement.symbol
|
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) {
|
for ((original, suspendView) in suspendFunctionOriginalToView) {
|
||||||
val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
|
val newOriginal = functionSymbolMap[original.symbol]?.owner ?: continue
|
||||||
val newSuspendView = suspendFunctionOriginalToView[newOriginal] ?: continue
|
val newSuspendView = suspendFunctionOriginalToView[newOriginal] ?: continue
|
||||||
|
|||||||
+2
@@ -45,6 +45,7 @@ class MemoizedInlineClassReplacements(
|
|||||||
private val propertyMap = ConcurrentHashMap<IrPropertySymbol, IrProperty>()
|
private val propertyMap = ConcurrentHashMap<IrPropertySymbol, IrProperty>()
|
||||||
|
|
||||||
internal val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
|
internal val originalFunctionForStaticReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
|
||||||
|
internal val originalFunctionForMethodReplacement: MutableMap<IrFunction, IrFunction> = ConcurrentHashMap()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a replacement for a function or a constructor.
|
* Get a replacement for a function or a constructor.
|
||||||
@@ -181,6 +182,7 @@ class MemoizedInlineClassReplacements(
|
|||||||
|
|
||||||
private fun createMethodReplacement(function: IrFunction): IrSimpleFunction =
|
private fun createMethodReplacement(function: IrFunction): IrSimpleFunction =
|
||||||
buildReplacement(function, function.origin) {
|
buildReplacement(function, function.origin) {
|
||||||
|
originalFunctionForMethodReplacement[this] = function
|
||||||
require(function.dispatchReceiverParameter != null && function is IrSimpleFunction)
|
require(function.dispatchReceiverParameter != null && function is IrSimpleFunction)
|
||||||
dispatchReceiverParameter = function.dispatchReceiverParameter?.copyTo(this, index = -1)
|
dispatchReceiverParameter = function.dispatchReceiverParameter?.copyTo(this, index = -1)
|
||||||
extensionReceiverParameter = function.extensionReceiverParameter?.copyTo(this, index = -1, name = Name.identifier("\$receiver"))
|
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");
|
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
|
@Test
|
||||||
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
@TestMetadata("iterateOverArrayOfInlineClassValues.kt")
|
||||||
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
public void testIterateOverArrayOfInlineClassValues() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user