diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt index 26b8d36055a..a95008b5d45 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt @@ -12,6 +12,8 @@ fun isNotEqualAnyRight(s: Any?, t: A) = s != t fun isNotEqualSameNullable(s: A?, t: A?) = s != t fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t +fun isNotEqualNullableUnboxedLeft(s: A, t: A?) = s != t +fun isNotEqualNullableUnboxedRight(s: A?, t: A) = s != t fun box(): String { if (!isNotNullVacuousLeft(A(""))) return "Fail 1" @@ -45,5 +47,11 @@ fun box(): String { if (!isNotEqualAnyNullableRight("", null)) return "Fail 29" if (!isNotEqualAnyNullableRight(null, A(""))) return "Fail 30" if (!isNotEqualAnyNullableRight(A(""), A("a"))) return "Fail 31" + if (!isNotEqualNullableUnboxedLeft(A(""), A("a"))) return "Fail 32" + if (isNotEqualNullableUnboxedLeft(A(""), A(""))) return "Fail 33" + if (!isNotEqualNullableUnboxedRight(A(""), A("a"))) return "Fail 34" + if (isNotEqualNullableUnboxedRight(A("a"), A("a"))) return "Fail 35" + if (!isNotEqualNullableUnboxedLeft(A(""), null)) return "Fail 36" + if (!isNotEqualNullableUnboxedRight(null, A(""))) return "Fail 37" return "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt index 7807e7ea3dc..6198fcc1fed 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt @@ -12,6 +12,8 @@ fun isNotEqualAnyRight(s: Any?, t: A) = s != t fun isNotEqualSameNullable(s: A?, t: A?) = s != t fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t +fun isNotEqualNullableUnboxedLeft(s: A, t: A?) = s != t +fun isNotEqualNullableUnboxedRight(s: A?, t: A) = s != t fun box(): String { if (!isNotNullVacuousLeft(A(0))) return "Fail 1" @@ -57,5 +59,15 @@ fun box(): String { if (!isNotEqualSameNullable(A(null), null)) return "Fail 42" if (!isNotEqualSameNullable(null, A(null))) return "Fail 43" + if (!isNotEqualNullableUnboxedLeft(A(0), A(1))) return "Fail 44" + if (isNotEqualNullableUnboxedLeft(A(0), A(0))) return "Fail 45" + if (!isNotEqualNullableUnboxedRight(A(0), A(1))) return "Fail 46" + if (isNotEqualNullableUnboxedRight(A(1), A(1))) return "Fail 47" + if (!isNotEqualNullableUnboxedLeft(A(0), null)) return "Fail 48" + if (!isNotEqualNullableUnboxedRight(null, A(1))) return "Fail 49" + + if (!isNotEqualNullableUnboxedRight(null, A(null))) return "Fail 50" + if (!isNotEqualNullableUnboxedLeft(A(null), null)) return "Fail 51" + return "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt index 5d6fc2f92d6..ec617c1c778 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt @@ -12,6 +12,8 @@ fun isNotEqualAnyRight(s: Any?, t: A) = s != t fun isNotEqualSameNullable(s: A?, t: A?) = s != t fun isNotEqualAnyNullableLeft(s: A?, t: Any?) = s != t fun isNotEqualAnyNullableRight(s: Any?, t: A?) = s != t +fun isNotEqualNullableUnboxedLeft(s: A, t: A?) = s != t +fun isNotEqualNullableUnboxedRight(s: A?, t: A) = s != t fun box(): String { if (!isNotNullVacuousLeft(A(0))) return "Fail 1" @@ -45,5 +47,11 @@ fun box(): String { if (!isNotEqualAnyNullableRight(0, null)) return "Fail 29" if (!isNotEqualAnyNullableRight(null, A(0))) return "Fail 30" if (!isNotEqualAnyNullableRight(A(0), A(1))) return "Fail 31" + if (!isNotEqualNullableUnboxedLeft(A(0), A(1))) return "Fail 32" + if (isNotEqualNullableUnboxedLeft(A(0), A(0))) return "Fail 33" + if (!isNotEqualNullableUnboxedRight(A(0), A(1))) return "Fail 34" + if (isNotEqualNullableUnboxedRight(A(1), A(1))) return "Fail 35" + if (!isNotEqualNullableUnboxedLeft(A(0), null)) return "Fail 36" + if (!isNotEqualNullableUnboxedRight(null, A(1))) return "Fail 37" return "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt index 6c81d848515..8eb2092fe7f 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt @@ -12,6 +12,8 @@ fun isEqualAnyRight(s: Any?, t: A) = s == t fun isEqualSameNullable(s: A?, t: A?) = s == t fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t +fun isEqualNullableUnboxedLeft(s: A, t: A?) = s == t +fun isEqualNullableUnboxedRight(s: A?, t: A) = s == t fun box(): String { if (isNullVacuousLeft(A(""))) return "Fail 1" @@ -45,5 +47,11 @@ fun box(): String { if (isEqualAnyNullableRight("", null)) return "Fail 29" if (isEqualAnyNullableRight(null, A(""))) return "Fail 30" if (isEqualAnyNullableRight(A(""), A("a"))) return "Fail 31" + if (isEqualNullableUnboxedLeft(A(""), A("a"))) return "Fail 32" + if (!isEqualNullableUnboxedLeft(A(""), A(""))) return "Fail 33" + if (isEqualNullableUnboxedRight(A(""), A("a"))) return "Fail 34" + if (!isEqualNullableUnboxedRight(A("a"), A("a"))) return "Fail 35" + if (isEqualNullableUnboxedLeft(A(""), null)) return "Fail 36" + if (isEqualNullableUnboxedRight(null, A(""))) return "Fail 37" return "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt index f4b10cf5d70..a2c7ac4faaf 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt @@ -12,6 +12,8 @@ fun isEqualAnyRight(s: Any?, t: A) = s == t fun isEqualSameNullable(s: A?, t: A?) = s == t fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t +fun isEqualNullableUnboxedLeft(s: A, t: A?) = s == t +fun isEqualNullableUnboxedRight(s: A?, t: A) = s == t fun box(): String { if (isNullVacuousLeft(A(0))) return "Fail 1" @@ -57,5 +59,15 @@ fun box(): String { if (isEqualSameNullable(A(null), null)) return "Fail 42" if (isEqualSameNullable(null, A(null))) return "Fail 43" + if (isEqualNullableUnboxedLeft(A(0), A(1))) return "Fail 44" + if (!isEqualNullableUnboxedLeft(A(0), A(0))) return "Fail 45" + if (isEqualNullableUnboxedRight(A(0), A(1))) return "Fail 46" + if (!isEqualNullableUnboxedRight(A(1), A(1))) return "Fail 47" + if (isEqualNullableUnboxedLeft(A(0), null)) return "Fail 48" + if (isEqualNullableUnboxedRight(null, A(1))) return "Fail 49" + + if (isEqualNullableUnboxedRight(null, A(null))) return "Fail 50" + if (isEqualNullableUnboxedLeft(A(null), null)) return "Fail 51" + return "OK" } diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt index 6aacfb144be..8031254ad1e 100644 --- a/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt @@ -12,6 +12,8 @@ fun isEqualAnyRight(s: Any?, t: A) = s == t fun isEqualSameNullable(s: A?, t: A?) = s == t fun isEqualAnyNullableLeft(s: A?, t: Any?) = s == t fun isEqualAnyNullableRight(s: Any?, t: A?) = s == t +fun isEqualNullableUnboxedLeft(s: A, t: A?) = s == t +fun isEqualNullableUnboxedRight(s: A?, t: A) = s == t fun box(): String { if (isNullVacuousLeft(A(0))) return "Fail 1" @@ -45,5 +47,11 @@ fun box(): String { if (isEqualAnyNullableRight(0, null)) return "Fail 29" if (isEqualAnyNullableRight(null, A(0))) return "Fail 30" if (isEqualAnyNullableRight(A(0), A(1))) return "Fail 31" + if (isEqualNullableUnboxedLeft(A(0), A(1))) return "Fail 32" + if (!isEqualNullableUnboxedLeft(A(0), A(0))) return "Fail 33" + if (isEqualNullableUnboxedRight(A(0), A(1))) return "Fail 34" + if (!isEqualNullableUnboxedRight(A(1), A(1))) return "Fail 35" + if (isEqualNullableUnboxedLeft(A(0), null)) return "Fail 36" + if (isEqualNullableUnboxedRight(null, A(1))) return "Fail 37" return "OK" } diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt index d24acf0f84a..c3d704f6f88 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt @@ -21,6 +21,10 @@ fun isEqualAnyLeftA(s: A, t: Any?) = s == t fun isEqualSameNullableA(s: A?, t: A?) = s == t fun isEqualAnyNullableLeftA(s: A?, t: Any?) = s == t fun isEqualAnyNullableRightA(s: Any?, t: A?) = s == t +// unbox, equals-impl0 +fun isEqualLeftNullableRightUnboxedA(s: A?, t: A) = s == t +// equals-impl +fun isEqualRightNullableLeftUnboxedA(s: A, t: A?) = s == t // FILE: b.kt @@ -42,6 +46,9 @@ fun isEqualSameNullableB(s: B?, t: B?) = s == t fun isEqualAnyNullableLeftB(s: B?, t: Any?) = s == t // boxes // fun isEqualAnyNullableRightB(s: Any?, t: B?) = s == t +// equals-impl0 +fun isEqualLeftNullableRightUnboxedB(s: B?, t: B) = s == t +fun isEqualRightNullableLeftUnboxedB(s: B, t: B?) = s == t // FILE: c.kt @@ -61,24 +68,28 @@ fun isEqualAnyLeftC(s: C, t: Any?) = s == t fun isEqualSameNullableC(s: C?, t: C?) = s == t fun isEqualAnyNullableLeftC(s: C?, t: Any?) = s == t fun isEqualAnyNullableRightC(s: Any?, t: C?) = s == t +// unbox, equals-impl0 +fun isEqualLeftNullableRightUnboxedC(s: C?, t: C) = s == t +// equals-impl +fun isEqualRightNullableLeftUnboxedC(s: C, t: C?) = s == t // @AKt.class: // 0 INVOKESTATIC A.box-impl -// 0 INVOKEVIRTUAL A.unbox-impl -// 1 INVOKESTATIC A.equals-impl \( -// 1 INVOKESTATIC A.equals-impl0 +// 1 INVOKEVIRTUAL A.unbox-impl +// 2 INVOKESTATIC A.equals-impl \( +// 2 INVOKESTATIC A.equals-impl0 // 3 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual // @BKt.class: // 0 INVOKESTATIC B.box-impl // 0 INVOKEVIRTUAL B.unbox-impl // 2 INVOKESTATIC B.equals-impl \( -// 2 INVOKESTATIC B.equals-impl0 +// 4 INVOKESTATIC B.equals-impl0 // 0 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual // @CKt.class: // 0 INVOKESTATIC C.box-impl -// 0 INVOKEVIRTUAL C.unbox-impl -// 1 INVOKESTATIC C.equals-impl \( -// 1 INVOKESTATIC C.equals-impl0 +// 1 INVOKEVIRTUAL C.unbox-impl +// 2 INVOKESTATIC C.equals-impl \( +// 2 INVOKESTATIC C.equals-impl0 // 3 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual \ No newline at end of file