IC mangling: Change mangling rules

1. Use 'x' for each parameter, which is not an inline class, every
possible clash is handled by signature rather than name. This change
makes more API changes binary-compatible. So, the changes are in line
with the vision of inline classes are value classes, like primitives.

2. Take return type into account when mangling a function if the return
type is inline class. Otherwise, boxing bridge will not be generated,
which leads to CCE at runtime.
This commit is contained in:
Ilmir Usmanov
2020-11-03 01:05:52 +01:00
parent d21a01ef59
commit c62093f54c
42 changed files with 250 additions and 83 deletions
@@ -12844,6 +12844,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTestWithFirVali
runTest("compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.kt");
}
@TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt")
public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt");
}
@TestMetadata("constructorsJvmSignaturesClash.kt")
public void testConstructorsJvmSignaturesClash() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineClasses/constructorsJvmSignaturesClash.kt");
@@ -61,6 +61,11 @@ public class DiagnosticsTestWithJvmIrBackendGenerated extends AbstractDiagnostic
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/caseInProperties.kt");
}
@TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt")
public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt");
}
@TestMetadata("vararg.kt")
public void testVararg() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/vararg.kt");
@@ -61,6 +61,11 @@ public class DiagnosticsTestWithOldJvmBackendGenerated extends AbstractDiagnosti
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/caseInProperties.kt");
}
@TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt")
public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt");
}
@TestMetadata("vararg.kt")
public void testVararg() throws Exception {
runTest("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature/vararg.kt");
@@ -12839,6 +12839,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
runTest("compiler/testData/diagnostics/tests/inlineClasses/basicInlineClassDeclarationDisabled.kt");
}
@TestMetadata("changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt")
public void testChangingNullabilityOfOrdinaryClassIsBinaryCompatibleChange() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineClasses/changingNullabilityOfOrdinaryClassIsBinaryCompatibleChange.kt");
}
@TestMetadata("constructorsJvmSignaturesClash.kt")
public void testConstructorsJvmSignaturesClash() throws Exception {
runTest("compiler/testData/diagnostics/tests/inlineClasses/constructorsJvmSignaturesClash.kt");
@@ -15797,6 +15797,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
}
@TestMetadata("overrideGenericWithInlineClass.kt")
public void testOverrideGenericWithInlineClass() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt");
}
@TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt")
public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt");
@@ -987,6 +987,11 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullabilityInExpansion.kt");
}
@TestMetadata("nullableAndNotNullPrimitive.kt")
public void testNullableAndNotNullPrimitive() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt");
}
@TestMetadata("overridingGenericMethodWithInlineClassParameterType.kt")
public void testOverridingGenericMethodWithInlineClassParameterType() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/overridingGenericMethodWithInlineClassParameterType.kt");
@@ -15797,6 +15797,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
}
@TestMetadata("overrideGenericWithInlineClass.kt")
public void testOverrideGenericWithInlineClass() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt");
}
@TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt")
public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt");
@@ -14397,6 +14397,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/kt35234a.kt");
}
@TestMetadata("overrideGenericWithInlineClass.kt")
public void testOverrideGenericWithInlineClass() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithInlineClass.kt");
}
@TestMetadata("overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt")
public void testOverrideGenericWithNullableInlineClassUpperBoundWithNonNullAny() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/boxReturnValueOnOverride/overrideGenericWithNullableInlineClassUpperBoundWithNonNullAny.kt");
@@ -957,6 +957,11 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullabilityInExpansion.kt");
}
@TestMetadata("nullableAndNotNullPrimitive.kt")
public void testNullableAndNotNullPrimitive() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/nullableAndNotNullPrimitive.kt");
}
@TestMetadata("overridingGenericMethodWithInlineClassParameterType.kt")
public void testOverridingGenericMethodWithInlineClassParameterType() throws Exception {
runTest("compiler/testData/codegen/bytecodeListing/inlineClasses/overridingGenericMethodWithInlineClassParameterType.kt");