JVM IR: Fix inline class constructors taking default values of inline class type.
This commit is contained in:
committed by
Alexander Udalov
parent
846e50a0c0
commit
4ac45eb38b
+3
@@ -430,6 +430,8 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F
|
||||
origin = JvmLoweredDeclarationOrigin.SYNTHETIC_INLINE_CLASS_MEMBER
|
||||
returnType = irConstructor.returnType
|
||||
}.apply {
|
||||
// Don't create a default argument stub for the primary constructor
|
||||
irConstructor.valueParameters.forEach { it.defaultValue = null }
|
||||
copyParameterDeclarationsFrom(irConstructor)
|
||||
body = context.createIrBuilder(this.symbol).irBlockBody(this) {
|
||||
+irDelegatingConstructorCall(context.irBuiltIns.anyClass.owner.constructors.single())
|
||||
@@ -444,6 +446,7 @@ private class JvmInlineClassLowering(private val context: JvmBackendContext) : F
|
||||
// Add a static bridge method to the primary constructor.
|
||||
// This is a placeholder for null-checks and default arguments.
|
||||
val function = context.inlineClassReplacements.getReplacementFunction(irConstructor)!!
|
||||
function.valueParameters.forEach { it.transformChildrenVoid() }
|
||||
with(context.createIrBuilder(function.symbol)) {
|
||||
val argument = function.valueParameters[0]
|
||||
function.body = irExprBody(
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
// !LANGUAGE: +InlineClasses
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
|
||||
inline class Inner(val result: String)
|
||||
|
||||
inline class A(val inner: Inner = Inner("OK"))
|
||||
|
||||
fun box(): String {
|
||||
return A().inner.result
|
||||
}
|
||||
+5
@@ -13851,6 +13851,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
+5
@@ -13851,6 +13851,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
+5
@@ -12721,6 +12721,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
+5
@@ -12721,6 +12721,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
Generated
+5
@@ -10981,6 +10981,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
+5
@@ -11046,6 +11046,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructor.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassPrimaryConstructorWithInlineClassValue.kt")
|
||||
public void testInlineClassPrimaryConstructorWithInlineClassValue() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassPrimaryConstructorWithInlineClassValue.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("inlineClassSecondaryConstructor.kt")
|
||||
public void testInlineClassSecondaryConstructor() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/defaultParameterValues/inlineClassSecondaryConstructor.kt");
|
||||
|
||||
Reference in New Issue
Block a user