Support Unit/V types in string-concat indy calls

unitComponent.kt test fails with JVM target 9+
This commit is contained in:
Mikhael Bogdanov
2021-02-17 11:07:28 +01:00
parent e3e7e6b740
commit 134fda8bad
5 changed files with 49 additions and 2 deletions
@@ -5080,6 +5080,12 @@ public class FirBytecodeTextTestGenerated extends AbstractFirBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicIndyDataClass.kt");
}
@Test
@TestMetadata("concatDynamicUnit.kt")
public void testConcatDynamicUnit() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicUnit.kt");
}
@Test
@TestMetadata("concatNotDynamic.kt")
public void testConcatNotDynamic() throws Exception {
@@ -1283,8 +1283,9 @@ class ExpressionCodegen(
generator.putValueOrProcessConstant(StackValue.constant(arg.value, type, null))
} else {
val value = arg.accept(this, data)
value.materializeAt(value.type, value.irType)
generator.invokeAppend(value.type)
val generatingType = if (value.type == Type.VOID_TYPE) AsmTypes.UNIT_TYPE else value.type
value.materializeAt(generatingType, value.irType)
generator.invokeAppend(generatingType)
}
}
generator.genToString()
@@ -0,0 +1,28 @@
// JVM_TARGET: 9
data class A(val x: Unit)
fun test(): Unit {}
interface B<T> {
fun test() : T {
return null!!
}
}
class Foo : B<Unit> {
}
fun box(): String {
val a = A(Unit)
val test = "Test ${a.component1()} ${test()} ${Foo().test()}"
return "OK"
}
// one in data class `toString` and one in `box` method
// 2 INVOKEDYNAMIC makeConcatWithConstants
// 1 makeConcatWithConstants\(Lkotlin/Unit;\)
// 1 makeConcatWithConstants\(Lkotlin/Unit;Lkotlin/Unit;Lkotlin/Unit;\)
// 0 append
// 0 stringPlus
@@ -4948,6 +4948,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicIndyDataClass.kt");
}
@Test
@TestMetadata("concatDynamicUnit.kt")
public void testConcatDynamicUnit() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicUnit.kt");
}
@Test
@TestMetadata("concatNotDynamic.kt")
public void testConcatNotDynamic() throws Exception {
@@ -5080,6 +5080,12 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicIndyDataClass.kt");
}
@Test
@TestMetadata("concatDynamicUnit.kt")
public void testConcatDynamicUnit() throws Exception {
runTest("compiler/testData/codegen/bytecodeText/stringOperations/concatDynamicUnit.kt");
}
@Test
@TestMetadata("concatNotDynamic.kt")
public void testConcatNotDynamic() throws Exception {