diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt index 40b90e36cdb..16da0103cff 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/serialization/JvmSerializerExtension.kt @@ -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 = diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index f61afe8ca9a..1dbf3d2ffc8 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -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 = diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/library/lib.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/library/lib.kt new file mode 100644 index 00000000000..c0655a02f05 --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/library/lib.kt @@ -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?) {} +} \ No newline at end of file diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/output.txt b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/output.txt new file mode 100644 index 00000000000..53fc69e8ebb --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/output.txt @@ -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 diff --git a/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/source.kt b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/source.kt new file mode 100644 index 00000000000..1c6a1ff1f7d --- /dev/null +++ b/compiler/testData/compileKotlinAgainstCustomBinaries/inlineClassesManglingAgainstLV13/source.kt @@ -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) +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index c0210951b13..cfe3369ee02 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -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::class.java).invoke(null, arrayOf()) + } + companion object { // compiler before 1.1.4 version did not include suspension marks into bytecode. private fun stripSuspensionMarksToImitateLegacyCompiler(bytes: ByteArray): Pair { diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt index 32a4e306aa5..2fb39032f46 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/serialization/AbstractVersionRequirementTest.kt @@ -209,11 +209,14 @@ abstract class AbstractVersionRequirementTest : TestCaseWithTmpdir() { fqNamesWithRequirements = listOf( "test.IC", "test.Ctor.", - "test.Foo", - "test.Bar", + "test.simpleFun", + "test.aliasedFun", + "test.simpleProp", "test.result", - "test.simpleProp" - ) + "test.Foo", + "test.Bar" + ), + shouldBeSingleRequirement = false ) } } diff --git a/libraries/tools/kotlinp/testData/Annotations.txt b/libraries/tools/kotlinp/testData/Annotations.txt index bf6e094ba26..94c37648cea 100644 --- a/libraries/tools/kotlinp/testData/Annotations.txt +++ b/libraries/tools/kotlinp/testData/Annotations.txt @@ -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