[FIR] Fix serialization of empty varargs in annotations in KLIBs

#KT-59249 Fixed
This commit is contained in:
Kirill Rakhman
2023-07-26 13:51:06 +02:00
committed by Space Team
parent 487c3e80bb
commit 38a54549ff
10 changed files with 189 additions and 37 deletions
@@ -1,7 +1,9 @@
Module: common
Module: platform
field:@FIELD:R|test/Anno|(t = <implicitArrayOf>(String(prosper))) public final val bar: R|kotlin/Int|
public get(): R|kotlin/Int|
@R|test/Anno|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>()) @R|test/Anno2|() @R|test/Anno3|() @R|test/Anno4|(t = <implicitArrayOf>()) @R|test/Anno5|(t = <implicitArrayOf>()) @R|test/Anno6|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>(String(live), String(long))) public final fun foo(): R|kotlin/Unit|
@@ -13,3 +15,42 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public final annotation class Anno2 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>()
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno2|
}
public final annotation class Anno3 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>(String(a))
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno3|
}
public final annotation class Anno4 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>|): R|test/Anno4|
}
public final annotation class Anno5 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>()
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno5|
}
public final annotation class Anno6 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>(String(a))
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno6|
}
@@ -1,7 +1,7 @@
field:@FIELD:R|test/Anno|(t = <implicitArrayOf>(String(prosper))) public final val bar: R|kotlin/Int|
public get(): R|kotlin/Int|
@R|test/Anno|(t = <implicitArrayOf>()) public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>()) @R|test/Anno2|() @R|test/Anno3|() @R|test/Anno4|(t = <implicitArrayOf>()) @R|test/Anno5|() @R|test/Anno6|() public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>(String(live), String(long))) public final fun foo(): R|kotlin/Unit|
@@ -13,3 +13,42 @@ public final annotation class Anno : R|kotlin/Annotation| {
}
public final annotation class Anno2 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>()
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno2|
}
public final annotation class Anno3 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>(String(a))
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno3|
}
public final annotation class Anno4 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>|): R|test/Anno4|
}
public final annotation class Anno5 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>()
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno5|
}
public final annotation class Anno6 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>| = <implicitArrayOf>(String(a))
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno6|
}
@@ -1,7 +1,7 @@
public final val bar: R|kotlin/Int|
public get(): R|kotlin/Int|
@R|test/Anno|() public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>()) @R|test/Anno2|() @R|test/Anno3|() @R|test/Anno4|(t = <implicitArrayOf>()) @R|test/Anno5|() @R|test/Anno6|() public final fun baz(): R|kotlin/Unit|
@R|test/Anno|(t = <implicitArrayOf>(String(live), String(long))) public final fun foo(): R|kotlin/Unit|
@@ -12,3 +12,43 @@ public final annotation class Anno : R|kotlin/Annotation| {
public constructor(vararg t: R|kotlin/Array<out kotlin/String>|): R|test/Anno|
}
public final annotation class Anno2 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno2|
}
public final annotation class Anno3 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno3|
}
public final annotation class Anno4 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>|): R|test/Anno4|
}
public final annotation class Anno5 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno5|
}
public final annotation class Anno6 : R|kotlin/Annotation| {
public final val t: R|kotlin/Array<out kotlin/String>|
public get(): R|kotlin/Array<out kotlin/String>|
public constructor(vararg t: R|kotlin/Array<out kotlin/String>| = STUB): R|test/Anno6|
}
@@ -1,11 +1,33 @@
// PLATFORM_DEPENDANT_METADATA
//ALLOW_AST_ACCESS
// ALLOW_AST_ACCESS
// NO_CHECK_SOURCE_VS_BINARY
// IGNORE_BACKEND_K1: JVM_IR, ANY
// LANGUAGE: +MultiPlatformProjects
// IGNORE K1
// ^mute KotlinpCompilerTestDataTest
// K1/K2 difference: KT-60820
// MODULE: common
// FILE: common.kt
package test
expect annotation class Anno4(vararg val t: String)
expect annotation class Anno5(vararg val t: String = [])
expect annotation class Anno6(vararg val t: String = ["a"])
// MODULE: platform()()(common)
// FILE: test.kt
package test
annotation class Anno(vararg val t: String)
annotation class Anno2(vararg val t: String = [])
annotation class Anno3(vararg val t: String = ["a"])
actual annotation class Anno4(vararg val t: String)
actual annotation class Anno5(vararg val t: String)
actual annotation class Anno6(vararg val t: String)
@Anno("live", "long") fun foo() {}
@field:Anno("prosper") val bar = { 42 }()
@Anno() fun baz() {}
@Anno() @Anno2() @Anno3() @Anno4() @Anno5() @Anno6() fun baz() {}
@@ -1,12 +0,0 @@
package test
@field:test.Anno(t = {"prosper"}) public val bar: kotlin.Int
public fun `<get-bar>`(): kotlin.Int
@test.Anno(t = {}) public fun baz(): kotlin.Unit
@test.Anno(t = {"live", "long"}) public fun foo(): kotlin.Unit
public final annotation class Anno : kotlin.Annotation {
/*primary*/ public constructor Anno(/*0*/ vararg t: kotlin.String /*kotlin.Array<out kotlin.String>*/)
public final val t: kotlin.Array<out kotlin.String>
public final fun `<get-t>`(): kotlin.Array<out kotlin.String>
}