IC mangling: Use old mangling scheme when LV is 1.3

Add integration test to check, that nothing is broken with LV 1.3.
This commit is contained in:
Ilmir Usmanov
2020-11-18 03:02:02 +01:00
parent 7ee35af721
commit c22071566e
8 changed files with 446 additions and 9 deletions
@@ -241,9 +241,7 @@ class JvmSerializerExtension @JvmOverloads constructor(
}
private fun MutableVersionRequirementTable.writeNewFunctionNameManglingRequirement(add: (Int) -> Unit) {
if (languageVersionSettings.languageVersion.major == 1 && languageVersionSettings.languageVersion.minor >= 4) {
add(writeVersionRequirement(1, 4, 30, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, this))
}
add(writeVersionRequirement(1, 4, 30, ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION, this))
}
private fun FunctionDescriptor.needsInlineParameterNullCheckRequirement(): Boolean =
@@ -196,7 +196,8 @@ class GenerationState private constructor(
val languageVersionSettings = configuration.languageVersionSettings
val useOldManglingSchemeForFunctionsWithInlineClassesInSignatures =
configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME)
configuration.getBoolean(JVMConfigurationKeys.USE_OLD_INLINE_CLASSES_MANGLING_SCHEME) ||
languageVersionSettings.languageVersion.run { major == 1 && minor < 4 }
val target = configuration.get(JVMConfigurationKeys.JVM_TARGET) ?: JvmTarget.DEFAULT
val runtimeStringConcat =
@@ -0,0 +1,202 @@
inline class ICString(val a: String)
inline class ICStringNullable(val a: String?)
inline class ICAny(val a: Any)
inline class ICAnyNullable(val a: Any?)
inline class ICInt(val a: Int)
inline class ICIntNullable(val a: Int?)
fun ordinaryNoninlineReturnsICString(): ICString = ICString("")
fun ordinaryNoninlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
fun ordinaryNoninlineReturnsICAny(): ICAny = ICAny("")
fun ordinaryNoninlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
fun ordinaryNoninlineReturnsICInt(): ICInt = ICInt(0)
fun ordinaryNoninlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
fun ordinaryNoninlineReturnsICString_Null(): ICString? = null
fun ordinaryNoninlineReturnsICStringNullable_Null(): ICStringNullable? = null
fun ordinaryNoninlineReturnsICAny_Null(): ICAny? = null
fun ordinaryNoninlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
fun ordinaryNoninlineReturnsICInt_Null(): ICInt? = null
fun ordinaryNoninlineReturnsICIntNullable_Null(): ICIntNullable? = null
fun ordinaryNoninlineAcceptsICString(i: Int, ic: ICString) {}
fun ordinaryNoninlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
fun ordinaryNoninlineAcceptsICAny(i: Int, ic: ICAny) {}
fun ordinaryNoninlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
fun ordinaryNoninlineAcceptsICInt(i: Int, ic: ICInt) {}
fun ordinaryNoninlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
fun ordinaryNoninlineAcceptsICString_Null(i: Int, ic: ICString?) {}
fun ordinaryNoninlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
fun ordinaryNoninlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
fun ordinaryNoninlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
fun ordinaryNoninlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
fun ordinaryNoninlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
inline fun ordinaryInlineReturnsICString(): ICString = ICString("")
inline fun ordinaryInlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
inline fun ordinaryInlineReturnsICAny(): ICAny = ICAny("")
inline fun ordinaryInlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
inline fun ordinaryInlineReturnsICInt(): ICInt = ICInt(0)
inline fun ordinaryInlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
inline fun ordinaryInlineReturnsICString_Null(): ICString? = null
inline fun ordinaryInlineReturnsICStringNullable_Null(): ICStringNullable? = null
inline fun ordinaryInlineReturnsICAny_Null(): ICAny? = null
inline fun ordinaryInlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
inline fun ordinaryInlineReturnsICInt_Null(): ICInt? = null
inline fun ordinaryInlineReturnsICIntNullable_Null(): ICIntNullable? = null
inline fun ordinaryInlineAcceptsICString(i: Int, ic: ICString) {}
inline fun ordinaryInlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
inline fun ordinaryInlineAcceptsICAny(i: Int, ic: ICAny) {}
inline fun ordinaryInlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
inline fun ordinaryInlineAcceptsICInt(i: Int, ic: ICInt) {}
inline fun ordinaryInlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
inline fun ordinaryInlineAcceptsICString_Null(i: Int, ic: ICString?) {}
inline fun ordinaryInlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
inline fun ordinaryInlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
inline fun ordinaryInlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
inline fun ordinaryInlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
inline fun ordinaryInlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
suspend fun suspendNoninlineReturnsICString(): ICString = ICString("")
suspend fun suspendNoninlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
suspend fun suspendNoninlineReturnsICAny(): ICAny = ICAny("")
suspend fun suspendNoninlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
suspend fun suspendNoninlineReturnsICInt(): ICInt = ICInt(0)
suspend fun suspendNoninlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
suspend fun suspendNoninlineReturnsICString_Null(): ICString? = null
suspend fun suspendNoninlineReturnsICStringNullable_Null(): ICStringNullable? = null
suspend fun suspendNoninlineReturnsICAny_Null(): ICAny? = null
suspend fun suspendNoninlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
suspend fun suspendNoninlineReturnsICInt_Null(): ICInt? = null
suspend fun suspendNoninlineReturnsICIntNullable_Null(): ICIntNullable? = null
suspend fun suspendNoninlineAcceptsICString(i: Int, ic: ICString) {}
suspend fun suspendNoninlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
suspend fun suspendNoninlineAcceptsICAny(i: Int, ic: ICAny) {}
suspend fun suspendNoninlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
suspend fun suspendNoninlineAcceptsICInt(i: Int, ic: ICInt) {}
suspend fun suspendNoninlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
suspend fun suspendNoninlineAcceptsICString_Null(i: Int, ic: ICString?) {}
suspend fun suspendNoninlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
suspend fun suspendNoninlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
suspend fun suspendNoninlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
suspend fun suspendNoninlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
suspend fun suspendNoninlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
suspend inline fun suspendInlineReturnsICString(): ICString = ICString("")
suspend inline fun suspendInlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
suspend inline fun suspendInlineReturnsICAny(): ICAny = ICAny("")
suspend inline fun suspendInlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
suspend inline fun suspendInlineReturnsICInt(): ICInt = ICInt(0)
suspend inline fun suspendInlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
suspend inline fun suspendInlineReturnsICString_Null(): ICString? = null
suspend inline fun suspendInlineReturnsICStringNullable_Null(): ICStringNullable? = null
suspend inline fun suspendInlineReturnsICAny_Null(): ICAny? = null
suspend inline fun suspendInlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
suspend inline fun suspendInlineReturnsICInt_Null(): ICInt? = null
suspend inline fun suspendInlineReturnsICIntNullable_Null(): ICIntNullable? = null
suspend inline fun suspendInlineAcceptsICString(i: Int, ic: ICString) {}
suspend inline fun suspendInlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
suspend inline fun suspendInlineAcceptsICAny(i: Int, ic: ICAny) {}
suspend inline fun suspendInlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
suspend inline fun suspendInlineAcceptsICInt(i: Int, ic: ICInt) {}
suspend inline fun suspendInlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
suspend inline fun suspendInlineAcceptsICString_Null(i: Int, ic: ICString?) {}
suspend inline fun suspendInlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
suspend inline fun suspendInlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
suspend inline fun suspendInlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
suspend inline fun suspendInlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
suspend inline fun suspendInlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
class C {
fun ordinaryNoninlineReturnsICString(): ICString = ICString("")
fun ordinaryNoninlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
fun ordinaryNoninlineReturnsICAny(): ICAny = ICAny("")
fun ordinaryNoninlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
fun ordinaryNoninlineReturnsICInt(): ICInt = ICInt(0)
fun ordinaryNoninlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
fun ordinaryNoninlineReturnsICString_Null(): ICString? = null
fun ordinaryNoninlineReturnsICStringNullable_Null(): ICStringNullable? = null
fun ordinaryNoninlineReturnsICAny_Null(): ICAny? = null
fun ordinaryNoninlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
fun ordinaryNoninlineReturnsICInt_Null(): ICInt? = null
fun ordinaryNoninlineReturnsICIntNullable_Null(): ICIntNullable? = null
fun ordinaryNoninlineAcceptsICString(i: Int, ic: ICString) {}
fun ordinaryNoninlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
fun ordinaryNoninlineAcceptsICAny(i: Int, ic: ICAny) {}
fun ordinaryNoninlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
fun ordinaryNoninlineAcceptsICInt(i: Int, ic: ICInt) {}
fun ordinaryNoninlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
fun ordinaryNoninlineAcceptsICString_Null(i: Int, ic: ICString?) {}
fun ordinaryNoninlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
fun ordinaryNoninlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
fun ordinaryNoninlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
fun ordinaryNoninlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
fun ordinaryNoninlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
inline fun ordinaryInlineReturnsICString(): ICString = ICString("")
inline fun ordinaryInlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
inline fun ordinaryInlineReturnsICAny(): ICAny = ICAny("")
inline fun ordinaryInlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
inline fun ordinaryInlineReturnsICInt(): ICInt = ICInt(0)
inline fun ordinaryInlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
inline fun ordinaryInlineReturnsICString_Null(): ICString? = null
inline fun ordinaryInlineReturnsICStringNullable_Null(): ICStringNullable? = null
inline fun ordinaryInlineReturnsICAny_Null(): ICAny? = null
inline fun ordinaryInlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
inline fun ordinaryInlineReturnsICInt_Null(): ICInt? = null
inline fun ordinaryInlineReturnsICIntNullable_Null(): ICIntNullable? = null
inline fun ordinaryInlineAcceptsICString(i: Int, ic: ICString) {}
inline fun ordinaryInlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
inline fun ordinaryInlineAcceptsICAny(i: Int, ic: ICAny) {}
inline fun ordinaryInlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
inline fun ordinaryInlineAcceptsICInt(i: Int, ic: ICInt) {}
inline fun ordinaryInlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
inline fun ordinaryInlineAcceptsICString_Null(i: Int, ic: ICString?) {}
inline fun ordinaryInlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
inline fun ordinaryInlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
inline fun ordinaryInlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
inline fun ordinaryInlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
inline fun ordinaryInlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
suspend fun suspendNoninlineReturnsICString(): ICString = ICString("")
suspend fun suspendNoninlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
suspend fun suspendNoninlineReturnsICAny(): ICAny = ICAny("")
suspend fun suspendNoninlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
suspend fun suspendNoninlineReturnsICInt(): ICInt = ICInt(0)
suspend fun suspendNoninlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
suspend fun suspendNoninlineReturnsICString_Null(): ICString? = null
suspend fun suspendNoninlineReturnsICStringNullable_Null(): ICStringNullable? = null
suspend fun suspendNoninlineReturnsICAny_Null(): ICAny? = null
suspend fun suspendNoninlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
suspend fun suspendNoninlineReturnsICInt_Null(): ICInt? = null
suspend fun suspendNoninlineReturnsICIntNullable_Null(): ICIntNullable? = null
suspend fun suspendNoninlineAcceptsICString(i: Int, ic: ICString) {}
suspend fun suspendNoninlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
suspend fun suspendNoninlineAcceptsICAny(i: Int, ic: ICAny) {}
suspend fun suspendNoninlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
suspend fun suspendNoninlineAcceptsICInt(i: Int, ic: ICInt) {}
suspend fun suspendNoninlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
suspend fun suspendNoninlineAcceptsICString_Null(i: Int, ic: ICString?) {}
suspend fun suspendNoninlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
suspend fun suspendNoninlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
suspend fun suspendNoninlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
suspend fun suspendNoninlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
suspend fun suspendNoninlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
suspend inline fun suspendInlineReturnsICString(): ICString = ICString("")
suspend inline fun suspendInlineReturnsICStringNullable(): ICStringNullable = ICStringNullable("")
suspend inline fun suspendInlineReturnsICAny(): ICAny = ICAny("")
suspend inline fun suspendInlineReturnsICAnyNullable(): ICAnyNullable = ICAnyNullable("")
suspend inline fun suspendInlineReturnsICInt(): ICInt = ICInt(0)
suspend inline fun suspendInlineReturnsICIntNullable(): ICIntNullable = ICIntNullable(0)
suspend inline fun suspendInlineReturnsICString_Null(): ICString? = null
suspend inline fun suspendInlineReturnsICStringNullable_Null(): ICStringNullable? = null
suspend inline fun suspendInlineReturnsICAny_Null(): ICAny? = null
suspend inline fun suspendInlineReturnsICAnyNullable_Null(): ICAnyNullable? = null
suspend inline fun suspendInlineReturnsICInt_Null(): ICInt? = null
suspend inline fun suspendInlineReturnsICIntNullable_Null(): ICIntNullable? = null
suspend inline fun suspendInlineAcceptsICString(i: Int, ic: ICString) {}
suspend inline fun suspendInlineAcceptsICStringNullable(i: Int, ic: ICStringNullable) {}
suspend inline fun suspendInlineAcceptsICAny(i: Int, ic: ICAny) {}
suspend inline fun suspendInlineAcceptsICAnyNullable(i: Int, ic: ICAnyNullable) {}
suspend inline fun suspendInlineAcceptsICInt(i: Int, ic: ICInt) {}
suspend inline fun suspendInlineAcceptsICIntNullable(i: Int, ic: ICIntNullable) {}
suspend inline fun suspendInlineAcceptsICString_Null(i: Int, ic: ICString?) {}
suspend inline fun suspendInlineAcceptsICStringNullable_Null(i: Int, ic: ICStringNullable?) {}
suspend inline fun suspendInlineAcceptsICAny_Null(i: Int, ic: ICAny?) {}
suspend inline fun suspendInlineAcceptsICAnyNullable_Null(i: Int, ic: ICAnyNullable?) {}
suspend inline fun suspendInlineAcceptsICInt_Null(i: Int, ic: ICInt?) {}
suspend inline fun suspendInlineAcceptsICIntNullable_Null(i: Int, ic: ICIntNullable?) {}
}
@@ -0,0 +1,10 @@
warning: ATTENTION!
This build uses unsafe internal compiler arguments:
-XXLanguage:-MangleClassMembersReturningInlineClasses
This mode is not recommended for production use,
as no stability/compatibility guarantees are given on
compiler or generated code. Use it at your own risk!
OK
@@ -0,0 +1,194 @@
suspend fun main() {
ordinaryNoninlineReturnsICString()
ordinaryNoninlineReturnsICStringNullable()
ordinaryNoninlineReturnsICAny()
ordinaryNoninlineReturnsICAnyNullable()
ordinaryNoninlineReturnsICInt()
ordinaryNoninlineReturnsICIntNullable()
ordinaryNoninlineReturnsICString_Null()
ordinaryNoninlineReturnsICStringNullable_Null()
ordinaryNoninlineReturnsICAny_Null()
ordinaryNoninlineReturnsICAnyNullable_Null()
ordinaryNoninlineReturnsICInt_Null()
ordinaryNoninlineReturnsICIntNullable_Null()
ordinaryNoninlineAcceptsICString(1, ICString(""))
ordinaryNoninlineAcceptsICStringNullable(1, ICStringNullable(""))
ordinaryNoninlineAcceptsICAny(1, ICAny(""))
ordinaryNoninlineAcceptsICAnyNullable(1, ICAnyNullable(""))
ordinaryNoninlineAcceptsICInt(1, ICInt(0))
ordinaryNoninlineAcceptsICIntNullable(1, ICIntNullable(0))
ordinaryNoninlineAcceptsICString_Null(1, null)
ordinaryNoninlineAcceptsICStringNullable_Null(1, null)
ordinaryNoninlineAcceptsICAny_Null(1, null)
ordinaryNoninlineAcceptsICAnyNullable_Null(1, null)
ordinaryNoninlineAcceptsICInt_Null(1, null)
ordinaryNoninlineAcceptsICIntNullable_Null(1, null)
ordinaryInlineReturnsICString()
ordinaryInlineReturnsICStringNullable()
ordinaryInlineReturnsICAny()
ordinaryInlineReturnsICAnyNullable()
ordinaryInlineReturnsICInt()
ordinaryInlineReturnsICIntNullable()
ordinaryInlineReturnsICString_Null()
ordinaryInlineReturnsICStringNullable_Null()
ordinaryInlineReturnsICAny_Null()
ordinaryInlineReturnsICAnyNullable_Null()
ordinaryInlineReturnsICInt_Null()
ordinaryInlineReturnsICIntNullable_Null()
ordinaryInlineAcceptsICString(1, ICString(""))
ordinaryInlineAcceptsICStringNullable(1, ICStringNullable(""))
ordinaryInlineAcceptsICAny(1, ICAny(""))
ordinaryInlineAcceptsICAnyNullable(1, ICAnyNullable(""))
ordinaryInlineAcceptsICInt(1, ICInt(0))
ordinaryInlineAcceptsICIntNullable(1, ICIntNullable(0))
ordinaryInlineAcceptsICString_Null(1, null)
ordinaryInlineAcceptsICStringNullable_Null(1, null)
ordinaryInlineAcceptsICAny_Null(1, null)
ordinaryInlineAcceptsICAnyNullable_Null(1, null)
ordinaryInlineAcceptsICInt_Null(1, null)
ordinaryInlineAcceptsICIntNullable_Null(1, null)
suspendNoninlineReturnsICString()
suspendNoninlineReturnsICStringNullable()
suspendNoninlineReturnsICAny()
suspendNoninlineReturnsICAnyNullable()
suspendNoninlineReturnsICInt()
suspendNoninlineReturnsICIntNullable()
suspendNoninlineReturnsICString_Null()
suspendNoninlineReturnsICStringNullable_Null()
suspendNoninlineReturnsICAny_Null()
suspendNoninlineReturnsICAnyNullable_Null()
suspendNoninlineReturnsICInt_Null()
suspendNoninlineReturnsICIntNullable_Null()
suspendNoninlineAcceptsICString(1, ICString(""))
suspendNoninlineAcceptsICStringNullable(1, ICStringNullable(""))
suspendNoninlineAcceptsICAny(1, ICAny(""))
suspendNoninlineAcceptsICAnyNullable(1, ICAnyNullable(""))
suspendNoninlineAcceptsICInt(1, ICInt(0))
suspendNoninlineAcceptsICIntNullable(1, ICIntNullable(0))
suspendNoninlineAcceptsICString_Null(1, null)
suspendNoninlineAcceptsICStringNullable_Null(1, null)
suspendNoninlineAcceptsICAny_Null(1, null)
suspendNoninlineAcceptsICAnyNullable_Null(1, null)
suspendNoninlineAcceptsICInt_Null(1, null)
suspendNoninlineAcceptsICIntNullable_Null(1, null)
suspendInlineReturnsICString()
suspendInlineReturnsICStringNullable()
suspendInlineReturnsICAny()
suspendInlineReturnsICAnyNullable()
suspendInlineReturnsICInt()
suspendInlineReturnsICIntNullable()
suspendInlineReturnsICString_Null()
suspendInlineReturnsICStringNullable_Null()
suspendInlineReturnsICAny_Null()
suspendInlineReturnsICAnyNullable_Null()
suspendInlineReturnsICInt_Null()
suspendInlineReturnsICIntNullable_Null()
suspendInlineAcceptsICString(1, ICString(""))
suspendInlineAcceptsICStringNullable(1, ICStringNullable(""))
suspendInlineAcceptsICAny(1, ICAny(""))
suspendInlineAcceptsICAnyNullable(1, ICAnyNullable(""))
suspendInlineAcceptsICInt(1, ICInt(0))
suspendInlineAcceptsICIntNullable(1, ICIntNullable(0))
suspendInlineAcceptsICString_Null(1, null)
suspendInlineAcceptsICStringNullable_Null(1, null)
suspendInlineAcceptsICAny_Null(1, null)
suspendInlineAcceptsICAnyNullable_Null(1, null)
suspendInlineAcceptsICInt_Null(1, null)
suspendInlineAcceptsICIntNullable_Null(1, null)
C().ordinaryNoninlineReturnsICString()
C().ordinaryNoninlineReturnsICStringNullable()
C().ordinaryNoninlineReturnsICAny()
C().ordinaryNoninlineReturnsICAnyNullable()
C().ordinaryNoninlineReturnsICInt()
C().ordinaryNoninlineReturnsICIntNullable()
C().ordinaryNoninlineReturnsICString_Null()
C().ordinaryNoninlineReturnsICStringNullable_Null()
C().ordinaryNoninlineReturnsICAny_Null()
C().ordinaryNoninlineReturnsICAnyNullable_Null()
C().ordinaryNoninlineReturnsICInt_Null()
C().ordinaryNoninlineReturnsICIntNullable_Null()
C().ordinaryNoninlineAcceptsICString(1, ICString(""))
C().ordinaryNoninlineAcceptsICStringNullable(1, ICStringNullable(""))
C().ordinaryNoninlineAcceptsICAny(1, ICAny(""))
C().ordinaryNoninlineAcceptsICAnyNullable(1, ICAnyNullable(""))
C().ordinaryNoninlineAcceptsICInt(1, ICInt(0))
C().ordinaryNoninlineAcceptsICIntNullable(1, ICIntNullable(0))
C().ordinaryNoninlineAcceptsICString_Null(1, null)
C().ordinaryNoninlineAcceptsICStringNullable_Null(1, null)
C().ordinaryNoninlineAcceptsICAny_Null(1, null)
C().ordinaryNoninlineAcceptsICAnyNullable_Null(1, null)
C().ordinaryNoninlineAcceptsICInt_Null(1, null)
C().ordinaryNoninlineAcceptsICIntNullable_Null(1, null)
C().ordinaryInlineReturnsICString()
C().ordinaryInlineReturnsICStringNullable()
C().ordinaryInlineReturnsICAny()
C().ordinaryInlineReturnsICAnyNullable()
C().ordinaryInlineReturnsICInt()
C().ordinaryInlineReturnsICIntNullable()
C().ordinaryInlineReturnsICString_Null()
C().ordinaryInlineReturnsICStringNullable_Null()
C().ordinaryInlineReturnsICAny_Null()
C().ordinaryInlineReturnsICAnyNullable_Null()
C().ordinaryInlineReturnsICInt_Null()
C().ordinaryInlineReturnsICIntNullable_Null()
C().ordinaryInlineAcceptsICString(1, ICString(""))
C().ordinaryInlineAcceptsICStringNullable(1, ICStringNullable(""))
C().ordinaryInlineAcceptsICAny(1, ICAny(""))
C().ordinaryInlineAcceptsICAnyNullable(1, ICAnyNullable(""))
C().ordinaryInlineAcceptsICInt(1, ICInt(0))
C().ordinaryInlineAcceptsICIntNullable(1, ICIntNullable(0))
C().ordinaryInlineAcceptsICString_Null(1, null)
C().ordinaryInlineAcceptsICStringNullable_Null(1, null)
C().ordinaryInlineAcceptsICAny_Null(1, null)
C().ordinaryInlineAcceptsICAnyNullable_Null(1, null)
C().ordinaryInlineAcceptsICInt_Null(1, null)
C().ordinaryInlineAcceptsICIntNullable_Null(1, null)
C().suspendNoninlineReturnsICString()
C().suspendNoninlineReturnsICStringNullable()
C().suspendNoninlineReturnsICAny()
C().suspendNoninlineReturnsICAnyNullable()
C().suspendNoninlineReturnsICInt()
C().suspendNoninlineReturnsICIntNullable()
C().suspendNoninlineReturnsICString_Null()
C().suspendNoninlineReturnsICStringNullable_Null()
C().suspendNoninlineReturnsICAny_Null()
C().suspendNoninlineReturnsICAnyNullable_Null()
C().suspendNoninlineReturnsICInt_Null()
C().suspendNoninlineReturnsICIntNullable_Null()
C().suspendNoninlineAcceptsICString(1, ICString(""))
C().suspendNoninlineAcceptsICStringNullable(1, ICStringNullable(""))
C().suspendNoninlineAcceptsICAny(1, ICAny(""))
C().suspendNoninlineAcceptsICAnyNullable(1, ICAnyNullable(""))
C().suspendNoninlineAcceptsICInt(1, ICInt(0))
C().suspendNoninlineAcceptsICIntNullable(1, ICIntNullable(0))
C().suspendNoninlineAcceptsICString_Null(1, null)
C().suspendNoninlineAcceptsICStringNullable_Null(1, null)
C().suspendNoninlineAcceptsICAny_Null(1, null)
C().suspendNoninlineAcceptsICAnyNullable_Null(1, null)
C().suspendNoninlineAcceptsICInt_Null(1, null)
C().suspendNoninlineAcceptsICIntNullable_Null(1, null)
C().suspendInlineReturnsICString()
C().suspendInlineReturnsICStringNullable()
C().suspendInlineReturnsICAny()
C().suspendInlineReturnsICAnyNullable()
C().suspendInlineReturnsICInt()
C().suspendInlineReturnsICIntNullable()
C().suspendInlineReturnsICString_Null()
C().suspendInlineReturnsICStringNullable_Null()
C().suspendInlineReturnsICAny_Null()
C().suspendInlineReturnsICAnyNullable_Null()
C().suspendInlineReturnsICInt_Null()
C().suspendInlineReturnsICIntNullable_Null()
C().suspendInlineAcceptsICString(1, ICString(""))
C().suspendInlineAcceptsICStringNullable(1, ICStringNullable(""))
C().suspendInlineAcceptsICAny(1, ICAny(""))
C().suspendInlineAcceptsICAnyNullable(1, ICAnyNullable(""))
C().suspendInlineAcceptsICInt(1, ICInt(0))
C().suspendInlineAcceptsICIntNullable(1, ICIntNullable(0))
C().suspendInlineAcceptsICString_Null(1, null)
C().suspendInlineAcceptsICStringNullable_Null(1, null)
C().suspendInlineAcceptsICAny_Null(1, null)
C().suspendInlineAcceptsICAnyNullable_Null(1, null)
C().suspendInlineAcceptsICInt_Null(1, null)
C().suspendInlineAcceptsICIntNullable_Null(1, null)
}
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime
import org.jetbrains.kotlin.codegen.inline.GENERATE_SMAP
import org.jetbrains.kotlin.codegen.inline.remove
import org.jetbrains.kotlin.codegen.optimization.common.asSequence
import org.jetbrains.kotlin.codegen.optimization.common.intConstant
@@ -714,6 +713,28 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration
)
}
fun testInlineClassesManglingAgainstLV13() {
val library = compileLibrary(
"library",
additionalOptions = listOf("-language-version", "1.3", "-Xinline-classes"),
checkKotlinOutput = {}
)
compileKotlin(
"source.kt",
tmpdir,
listOf(library),
additionalOptions = listOf("-XXLanguage:-MangleClassMembersReturningInlineClasses", "-Xinline-classes")
)
// Difference in mangling becomes apparent only on load time as NSME, so, to check the mangling we need to load the classfile
loadClassFile("SourceKt", tmpdir, library)
}
private fun loadClassFile(className: String, dir: File, library: File) {
val classLoader = URLClassLoader(arrayOf(dir.toURI().toURL(), library.toURI().toURL()))
val mainClass = classLoader.loadClass(className)
mainClass.getDeclaredMethod("main", Array<String>::class.java).invoke(null, arrayOf<String>())
}
companion object {
// compiler before 1.1.4 version did not include suspension marks into bytecode.
private fun stripSuspensionMarksToImitateLegacyCompiler(bytes: ByteArray): Pair<ByteArray, Int> {
@@ -209,11 +209,14 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() {
fqNamesWithRequirements = listOf(
"test.IC",
"test.Ctor.<init>",
"test.Foo",
"test.Bar",
"test.simpleFun",
"test.aliasedFun",
"test.simpleProp",
"test.result",
"test.simpleProp"
)
"test.Foo",
"test.Bar"
),
shouldBeSingleRequirement = false
)
}
}
+8
View File
@@ -79,48 +79,56 @@ public final annotation class A : kotlin/Annotation {
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ub()B
public final val ub: kotlin/UByte
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ub_max()B
public final val ub_max: kotlin/UByte
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ui()I
public final val ui: kotlin/UInt
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ui_max()I
public final val ui_max: kotlin/UInt
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ul()J
public final val ul: kotlin/ULong
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: ul_max()J
public final val ul_max: kotlin/ULong
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: us()S
public final val us: kotlin/UShort
public final get
// requires language version 1.3.0 (level=ERROR)
// requires compiler version 1.4.30 (level=ERROR)
// requires language version 1.4.0 (level=ERROR)
// getter: us_max()S
public final val us_max: kotlin/UShort