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:
Georgy Bronnikov
2021-06-21 18:07:48 +03:00
committed by teamcityserver
parent 594cc29dd2
commit 40872dd4ca
5 changed files with 38 additions and 0 deletions
@@ -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
@@ -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"))