[IR BE] Remap references in default arg value in inner class constructor

Make sure that there is no reference into zombie declarations.

 - fix KT-40771
 - add test
This commit is contained in:
Roman Artemev
2020-10-05 22:31:06 +03:00
parent f597585ffb
commit a52e045c91
9 changed files with 51 additions and 1 deletions
@@ -46,10 +46,11 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses
val newConstructor = lowerConstructor(declaration)
val oldConstructorParameterToNew = innerClassesSupport.primaryConstructorParameterMap(declaration)
val variableRemapper = VariableRemapper(oldConstructorParameterToNew)
for ((oldParam, newParam) in oldConstructorParameterToNew.entries) {
newParam.defaultValue = oldParam.defaultValue?.let { oldDefault ->
context.irFactory.createExpressionBody(oldDefault.startOffset, oldDefault.endOffset) {
expression = oldDefault.expression.patchDeclarationParents(newConstructor)
expression = oldDefault.expression.transform(variableRemapper, null).patchDeclarationParents(newConstructor)
}
}
}