diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt new file mode 100644 index 00000000000..5de9ddef6c6 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt @@ -0,0 +1,50 @@ +// !LANGUAGE: +InlineClasses + +inline class Inner(val w: String) +inline class A(val x: Inner) + +fun isNullVacuousLeft(s: A) = s == null +fun isNullVacuousRight(s: A) = null == s +fun isNullLeft(s: A?) = s == null +fun isNullRight(s: A?) = null == s +fun isEqualSame(s: A, t: A) = s == t +fun isEqualAnyLeft(s: A, t: Any?) = s == t +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 box(): String { + if (isNullVacuousLeft(A(Inner("")))) return "Fail 1" + if (isNullVacuousRight(A(Inner("")))) return "Fail 2" + if (isNullLeft(A(Inner("")))) return "Fail 3" + if (isNullRight(A(Inner("")))) return "Fail 4" + if (!isNullLeft(null)) return "Fail 5" + if (!isNullRight(null)) return "Fail 6" + if (!isEqualSame(A(Inner("")), A(Inner("")))) return "Fail 7" + if (isEqualSame(A(Inner("")), A(Inner("a")))) return "Fail 8" + if (isEqualAnyLeft(A(Inner("")), Inner(""))) return "Fail 9" + if (isEqualAnyLeft(A(Inner("")), null)) return "Fail 10" + if (!isEqualAnyLeft(A(Inner("")), A(Inner("")))) return "Fail 11" + if (isEqualAnyRight(Inner(""), A(Inner("")))) return "Fail 12" + if (isEqualAnyRight(null, A(Inner("")))) return "Fail 13" + if (!isEqualAnyRight(A(Inner("")), A(Inner("")))) return "Fail 14" + if (!isEqualSameNullable(null, null)) return "Fail 15" + if (!isEqualSameNullable(A(Inner("")), A(Inner("")))) return "Fail 16" + if (isEqualSameNullable(null, A(Inner("")))) return "Fail 17" + if (isEqualSameNullable(A(Inner("")), null)) return "Fail 18" + if (isEqualSameNullable(A(Inner("")), A(Inner("a")))) return "Fail 19" + if (!isEqualAnyNullableLeft(null, null)) return "Fail 20" + if (!isEqualAnyNullableLeft(A(Inner("")), A(Inner("")))) return "Fail 21" + if (isEqualAnyNullableLeft(A(Inner("")), "")) return "Fail 22" + if (isEqualAnyNullableLeft(null, Inner(""))) return "Fail 23" + if (isEqualAnyNullableLeft(A(Inner("")), null)) return "Fail 24" + if (isEqualAnyNullableLeft(A(Inner("")), A(Inner("a")))) return "Fail 25" + if (!isEqualAnyNullableRight(null, null)) return "Fail 26" + if (!isEqualAnyNullableRight(A(Inner("a")), A(Inner("a")))) return "Fail 27" + if (isEqualAnyNullableRight(Inner(""), A(Inner("")))) return "Fail 28" + if (isEqualAnyNullableRight(Inner(""), null)) return "Fail 29" + if (isEqualAnyNullableRight(null, A(Inner("")))) return "Fail 30" + if (isEqualAnyNullableRight(A(Inner("a")), A(Inner("b")))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt new file mode 100644 index 00000000000..a2acdf9dd14 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val a: String) + +fun isEqualNA(x: A?, y: A) = x == y +fun isEqualAN(x: A, y: A?) = x == y + +fun box(): String { + if (isEqualNA(null, A(""))) return "Fail 1" + if (isEqualAN(A(""), null)) return "Fail 2" + if (!isEqualNA(A(""), A(""))) return "Fail 3" + if (!isEqualAN(A(""), A(""))) return "Fail 4" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt new file mode 100644 index 00000000000..6fe87b662ed --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt @@ -0,0 +1,50 @@ +// !LANGUAGE: +InlineClasses + +inline class Inner(val w: String) +inline class A(val x: Inner) + +fun isNotNullVacuousLeft(s: A) = s != null +fun isNotNullVacuousRight(s: A) = null != s +fun isNotNullLeft(s: A?) = s != null +fun isNotNullRight(s: A?) = null != s +fun isNotEqualSame(s: A, t: A) = s != t +fun isNotEqualAnyLeft(s: A, t: Any?) = s != t +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 box(): String { + if (!isNotNullVacuousLeft(A(Inner("")))) return "Fail 1" + if (!isNotNullVacuousRight(A(Inner("")))) return "Fail 2" + if (!isNotNullLeft(A(Inner("")))) return "Fail 3" + if (!isNotNullRight(A(Inner("")))) return "Fail 4" + if (isNotNullLeft(null)) return "Fail 5" + if (isNotNullRight(null)) return "Fail 6" + if (isNotEqualSame(A(Inner("")), A(Inner("")))) return "Fail 7" + if (!isNotEqualSame(A(Inner("")), A(Inner("a")))) return "Fail 8" + if (!isNotEqualAnyLeft(A(Inner("")), Inner(""))) return "Fail 9" + if (!isNotEqualAnyLeft(A(Inner("")), null)) return "Fail 10" + if (isNotEqualAnyLeft(A(Inner("")), A(Inner("")))) return "Fail 11" + if (!isNotEqualAnyRight(Inner(""), A(Inner("")))) return "Fail 12" + if (!isNotEqualAnyRight(null, A(Inner("")))) return "Fail 13" + if (isNotEqualAnyRight(A(Inner("")), A(Inner("")))) return "Fail 14" + if (isNotEqualSameNullable(null, null)) return "Fail 15" + if (isNotEqualSameNullable(A(Inner("")), A(Inner("")))) return "Fail 16" + if (!isNotEqualSameNullable(null, A(Inner("")))) return "Fail 17" + if (!isNotEqualSameNullable(A(Inner("")), null)) return "Fail 18" + if (!isNotEqualSameNullable(A(Inner("")), A(Inner("a")))) return "Fail 19" + if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20" + if (isNotEqualAnyNullableLeft(A(Inner("")), A(Inner("")))) return "Fail 21" + if (!isNotEqualAnyNullableLeft(A(Inner("")), "")) return "Fail 22" + if (!isNotEqualAnyNullableLeft(null, Inner(""))) return "Fail 23" + if (!isNotEqualAnyNullableLeft(A(Inner("")), null)) return "Fail 24" + if (!isNotEqualAnyNullableLeft(A(Inner("")), A(Inner("a")))) return "Fail 25" + if (isNotEqualAnyNullableRight(null, null)) return "Fail 26" + if (isNotEqualAnyNullableRight(A(Inner("a")), A(Inner("a")))) return "Fail 27" + if (!isNotEqualAnyNullableRight(Inner(""), A(Inner("")))) return "Fail 28" + if (!isNotEqualAnyNullableRight(Inner(""), null)) return "Fail 29" + if (!isNotEqualAnyNullableRight(null, A(Inner("")))) return "Fail 30" + if (!isNotEqualAnyNullableRight(A(Inner("a")), A(Inner("b")))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt new file mode 100644 index 00000000000..26b8d36055a --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt @@ -0,0 +1,49 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: String) + +fun isNotNullVacuousLeft(s: A) = s != null +fun isNotNullVacuousRight(s: A) = null != s +fun isNotNullLeft(s: A?) = s != null +fun isNotNullRight(s: A?) = null != s +fun isNotEqualSame(s: A, t: A) = s != t +fun isNotEqualAnyLeft(s: A, t: Any?) = s != t +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 box(): String { + if (!isNotNullVacuousLeft(A(""))) return "Fail 1" + if (!isNotNullVacuousRight(A(""))) return "Fail 2" + if (!isNotNullLeft(A(""))) return "Fail 3" + if (!isNotNullRight(A(""))) return "Fail 4" + if (isNotNullLeft(null)) return "Fail 5" + if (isNotNullRight(null)) return "Fail 6" + if (isNotEqualSame(A(""), A(""))) return "Fail 7" + if (!isNotEqualSame(A("a"), A("b"))) return "Fail 8" + if (!isNotEqualAnyLeft(A(""), "")) return "Fail 9" + if (!isNotEqualAnyLeft(A(""), null)) return "Fail 10" + if (isNotEqualAnyLeft(A(""), A(""))) return "Fail 11" + if (!isNotEqualAnyRight("", A(""))) return "Fail 12" + if (!isNotEqualAnyRight(null, A(""))) return "Fail 13" + if (isNotEqualAnyRight(A(""), A(""))) return "Fail 14" + if (isNotEqualSameNullable(null, null)) return "Fail 15" + if (isNotEqualSameNullable(A(""), A(""))) return "Fail 16" + if (!isNotEqualSameNullable(null, A(""))) return "Fail 17" + if (!isNotEqualSameNullable(A(""), null)) return "Fail 18" + if (!isNotEqualSameNullable(A(""), A("a"))) return "Fail 19" + if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20" + if (isNotEqualAnyNullableLeft(A(""), A(""))) return "Fail 21" + if (!isNotEqualAnyNullableLeft(A(""), "")) return "Fail 22" + if (!isNotEqualAnyNullableLeft(null, "")) return "Fail 23" + if (!isNotEqualAnyNullableLeft(A(""), null)) return "Fail 24" + if (!isNotEqualAnyNullableLeft(A(""), A("a"))) return "Fail 25" + if (isNotEqualAnyNullableRight(null, null)) return "Fail 26" + if (isNotEqualAnyNullableRight(A(""), A(""))) return "Fail 27" + if (!isNotEqualAnyNullableRight("", A(""))) return "Fail 28" + if (!isNotEqualAnyNullableRight("", null)) return "Fail 29" + if (!isNotEqualAnyNullableRight(null, A(""))) return "Fail 30" + if (!isNotEqualAnyNullableRight(A(""), A("a"))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt new file mode 100644 index 00000000000..7807e7ea3dc --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt @@ -0,0 +1,61 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Any?) + +fun isNotNullVacuousLeft(s: A) = s != null +fun isNotNullVacuousRight(s: A) = null != s +fun isNotNullLeft(s: A?) = s != null +fun isNotNullRight(s: A?) = null != s +fun isNotEqualSame(s: A, t: A) = s != t +fun isNotEqualAnyLeft(s: A, t: Any?) = s != t +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 box(): String { + if (!isNotNullVacuousLeft(A(0))) return "Fail 1" + if (!isNotNullVacuousRight(A(0))) return "Fail 2" + if (!isNotNullLeft(A(0))) return "Fail 3" + if (!isNotNullRight(A(0))) return "Fail 4" + if (isNotNullLeft(null)) return "Fail 5" + if (isNotNullRight(null)) return "Fail 6" + if (isNotEqualSame(A(0), A(0))) return "Fail 7" + if (!isNotEqualSame(A(0), A(1))) return "Fail 8" + if (!isNotEqualAnyLeft(A(0), 0)) return "Fail 9" + if (!isNotEqualAnyLeft(A(0), null)) return "Fail 10" + if (isNotEqualAnyLeft(A(0), A(0))) return "Fail 11" + if (!isNotEqualAnyRight(0, A(0))) return "Fail 12" + if (!isNotEqualAnyRight(null, A(0))) return "Fail 13" + if (isNotEqualAnyRight(A(0), A(0))) return "Fail 14" + if (isNotEqualSameNullable(null, null)) return "Fail 15" + if (isNotEqualSameNullable(A(0), A(0))) return "Fail 16" + if (!isNotEqualSameNullable(null, A(0))) return "Fail 17" + if (!isNotEqualSameNullable(A(0), null)) return "Fail 18" + if (!isNotEqualSameNullable(A(0), A(1))) return "Fail 19" + if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20" + if (isNotEqualAnyNullableLeft(A(0), A(0))) return "Fail 21" + if (!isNotEqualAnyNullableLeft(A(0), 0)) return "Fail 22" + if (!isNotEqualAnyNullableLeft(null, 0)) return "Fail 23" + if (!isNotEqualAnyNullableLeft(A(0), null)) return "Fail 24" + if (!isNotEqualAnyNullableLeft(A(0), A(1))) return "Fail 25" + if (isNotEqualAnyNullableRight(null, null)) return "Fail 26" + if (isNotEqualAnyNullableRight(A(0), A(0))) return "Fail 27" + if (!isNotEqualAnyNullableRight(0, A(0))) return "Fail 28" + 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 (!isNotNullVacuousLeft(A(null))) return "Fail 32" + if (!isNotNullVacuousRight(A(null))) return "Fail 33" + if (!isNotNullLeft(A(null))) return "Fail 34" + if (!isNotNullRight(A(null))) return "Fail 35" + if (!isNotEqualAnyLeft(A(null), null)) return "Fail 36" + if (!isNotEqualAnyRight(null, A(null))) return "Fail 37" + if (!isNotEqualAnyNullableLeft(A(null), null)) return "Fail 38" + if (!isNotEqualAnyNullableRight(null, A(null))) return "Fail 39" + if (!isNotEqualSameNullable(A(null), null)) return "Fail 42" + if (!isNotEqualSameNullable(null, A(null))) return "Fail 43" + + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt new file mode 100644 index 00000000000..5d6fc2f92d6 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt @@ -0,0 +1,49 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Int) + +fun isNotNullVacuousLeft(s: A) = s != null +fun isNotNullVacuousRight(s: A) = null != s +fun isNotNullLeft(s: A?) = s != null +fun isNotNullRight(s: A?) = null != s +fun isNotEqualSame(s: A, t: A) = s != t +fun isNotEqualAnyLeft(s: A, t: Any?) = s != t +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 box(): String { + if (!isNotNullVacuousLeft(A(0))) return "Fail 1" + if (!isNotNullVacuousRight(A(0))) return "Fail 2" + if (!isNotNullLeft(A(0))) return "Fail 3" + if (!isNotNullRight(A(0))) return "Fail 4" + if (isNotNullLeft(null)) return "Fail 5" + if (isNotNullRight(null)) return "Fail 6" + if (isNotEqualSame(A(0), A(0))) return "Fail 7" + if (!isNotEqualSame(A(0), A(1))) return "Fail 8" + if (!isNotEqualAnyLeft(A(0), 0)) return "Fail 9" + if (!isNotEqualAnyLeft(A(0), null)) return "Fail 10" + if (isNotEqualAnyLeft(A(0), A(0))) return "Fail 11" + if (!isNotEqualAnyRight(0, A(0))) return "Fail 12" + if (!isNotEqualAnyRight(null, A(0))) return "Fail 13" + if (isNotEqualAnyRight(A(0), A(0))) return "Fail 14" + if (isNotEqualSameNullable(null, null)) return "Fail 15" + if (isNotEqualSameNullable(A(0), A(0))) return "Fail 16" + if (!isNotEqualSameNullable(null, A(0))) return "Fail 17" + if (!isNotEqualSameNullable(A(0), null)) return "Fail 18" + if (!isNotEqualSameNullable(A(0), A(1))) return "Fail 19" + if (isNotEqualAnyNullableLeft(null, null)) return "Fail 20" + if (isNotEqualAnyNullableLeft(A(0), A(0))) return "Fail 21" + if (!isNotEqualAnyNullableLeft(A(0), 0)) return "Fail 22" + if (!isNotEqualAnyNullableLeft(null, 0)) return "Fail 23" + if (!isNotEqualAnyNullableLeft(A(0), null)) return "Fail 24" + if (!isNotEqualAnyNullableLeft(A(0), A(1))) return "Fail 25" + if (isNotEqualAnyNullableRight(null, null)) return "Fail 26" + if (isNotEqualAnyNullableRight(A(0), A(0))) return "Fail 27" + if (!isNotEqualAnyNullableRight(0, A(0))) return "Fail 28" + if (!isNotEqualAnyNullableRight(0, null)) return "Fail 29" + if (!isNotEqualAnyNullableRight(null, A(0))) return "Fail 30" + if (!isNotEqualAnyNullableRight(A(0), A(1))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt new file mode 100644 index 00000000000..6c81d848515 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt @@ -0,0 +1,49 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: String) + +fun isNullVacuousLeft(s: A) = s == null +fun isNullVacuousRight(s: A) = null == s +fun isNullLeft(s: A?) = s == null +fun isNullRight(s: A?) = null == s +fun isEqualSame(s: A, t: A) = s == t +fun isEqualAnyLeft(s: A, t: Any?) = s == t +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 box(): String { + if (isNullVacuousLeft(A(""))) return "Fail 1" + if (isNullVacuousRight(A(""))) return "Fail 2" + if (isNullLeft(A(""))) return "Fail 3" + if (isNullRight(A(""))) return "Fail 4" + if (!isNullLeft(null)) return "Fail 5" + if (!isNullRight(null)) return "Fail 6" + if (!isEqualSame(A(""), A(""))) return "Fail 7" + if (isEqualSame(A("a"), A("b"))) return "Fail 8" + if (isEqualAnyLeft(A(""), "")) return "Fail 9" + if (isEqualAnyLeft(A(""), null)) return "Fail 10" + if (!isEqualAnyLeft(A(""), A(""))) return "Fail 11" + if (isEqualAnyRight("", A(""))) return "Fail 12" + if (isEqualAnyRight(null, A(""))) return "Fail 13" + if (!isEqualAnyRight(A(""), A(""))) return "Fail 14" + if (!isEqualSameNullable(null, null)) return "Fail 15" + if (!isEqualSameNullable(A(""), A(""))) return "Fail 16" + if (isEqualSameNullable(null, A(""))) return "Fail 17" + if (isEqualSameNullable(A(""), null)) return "Fail 18" + if (isEqualSameNullable(A(""), A("a"))) return "Fail 19" + if (!isEqualAnyNullableLeft(null, null)) return "Fail 20" + if (!isEqualAnyNullableLeft(A(""), A(""))) return "Fail 21" + if (isEqualAnyNullableLeft(A(""), "")) return "Fail 22" + if (isEqualAnyNullableLeft(null, "")) return "Fail 23" + if (isEqualAnyNullableLeft(A(""), null)) return "Fail 24" + if (isEqualAnyNullableLeft(A(""), A("a"))) return "Fail 25" + if (!isEqualAnyNullableRight(null, null)) return "Fail 26" + if (!isEqualAnyNullableRight(A(""), A(""))) return "Fail 27" + if (isEqualAnyNullableRight("", A(""))) return "Fail 28" + if (isEqualAnyNullableRight("", null)) return "Fail 29" + if (isEqualAnyNullableRight(null, A(""))) return "Fail 30" + if (isEqualAnyNullableRight(A(""), A("a"))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt new file mode 100644 index 00000000000..f4b10cf5d70 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt @@ -0,0 +1,61 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Any?) + +fun isNullVacuousLeft(s: A) = s == null +fun isNullVacuousRight(s: A) = null == s +fun isNullLeft(s: A?) = s == null +fun isNullRight(s: A?) = null == s +fun isEqualSame(s: A, t: A) = s == t +fun isEqualAnyLeft(s: A, t: Any?) = s == t +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 box(): String { + if (isNullVacuousLeft(A(0))) return "Fail 1" + if (isNullVacuousRight(A(0))) return "Fail 2" + if (isNullLeft(A(0))) return "Fail 3" + if (isNullRight(A(0))) return "Fail 4" + if (!isNullLeft(null)) return "Fail 5" + if (!isNullRight(null)) return "Fail 6" + if (!isEqualSame(A(0), A(0))) return "Fail 7" + if (isEqualSame(A(0), A(1))) return "Fail 8" + if (isEqualAnyLeft(A(0), 0)) return "Fail 9" + if (isEqualAnyLeft(A(0), null)) return "Fail 10" + if (!isEqualAnyLeft(A(0), A(0))) return "Fail 11" + if (isEqualAnyRight(0, A(0))) return "Fail 12" + if (isEqualAnyRight(null, A(0))) return "Fail 13" + if (!isEqualAnyRight(A(0), A(0))) return "Fail 14" + if (!isEqualSameNullable(null, null)) return "Fail 15" + if (!isEqualSameNullable(A(0), A(0))) return "Fail 16" + if (isEqualSameNullable(null, A(0))) return "Fail 17" + if (isEqualSameNullable(A(0), null)) return "Fail 18" + if (isEqualSameNullable(A(0), A(1))) return "Fail 19" + if (!isEqualAnyNullableLeft(null, null)) return "Fail 20" + if (!isEqualAnyNullableLeft(A(0), A(0))) return "Fail 21" + if (isEqualAnyNullableLeft(A(0), 0)) return "Fail 22" + if (isEqualAnyNullableLeft(null, 0)) return "Fail 23" + if (isEqualAnyNullableLeft(A(0), null)) return "Fail 24" + if (isEqualAnyNullableLeft(A(0), A(1))) return "Fail 25" + if (!isEqualAnyNullableRight(null, null)) return "Fail 26" + if (!isEqualAnyNullableRight(A(0), A(0))) return "Fail 27" + if (isEqualAnyNullableRight(0, A(0))) return "Fail 28" + 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 (isNullVacuousLeft(A(null))) return "Fail 32" + if (isNullVacuousRight(A(null))) return "Fail 33" + if (isNullLeft(A(null))) return "Fail 34" + if (isNullRight(A(null))) return "Fail 35" + if (isEqualAnyLeft(A(null), null)) return "Fail 36" + if (isEqualAnyRight(null, A(null))) return "Fail 37" + if (isEqualAnyNullableLeft(A(null), null)) return "Fail 38" + if (isEqualAnyNullableRight(null, A(null))) return "Fail 39" + if (isEqualSameNullable(A(null), null)) return "Fail 42" + if (isEqualSameNullable(null, A(null))) return "Fail 43" + + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt b/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt new file mode 100644 index 00000000000..6aacfb144be --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt @@ -0,0 +1,49 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Int) + +fun isNullVacuousLeft(s: A) = s == null +fun isNullVacuousRight(s: A) = null == s +fun isNullLeft(s: A?) = s == null +fun isNullRight(s: A?) = null == s +fun isEqualSame(s: A, t: A) = s == t +fun isEqualAnyLeft(s: A, t: Any?) = s == t +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 box(): String { + if (isNullVacuousLeft(A(0))) return "Fail 1" + if (isNullVacuousRight(A(0))) return "Fail 2" + if (isNullLeft(A(0))) return "Fail 3" + if (isNullRight(A(0))) return "Fail 4" + if (!isNullLeft(null)) return "Fail 5" + if (!isNullRight(null)) return "Fail 6" + if (!isEqualSame(A(0), A(0))) return "Fail 7" + if (isEqualSame(A(0), A(1))) return "Fail 8" + if (isEqualAnyLeft(A(0), 0)) return "Fail 9" + if (isEqualAnyLeft(A(0), null)) return "Fail 10" + if (!isEqualAnyLeft(A(0), A(0))) return "Fail 11" + if (isEqualAnyRight(0, A(0))) return "Fail 12" + if (isEqualAnyRight(null, A(0))) return "Fail 13" + if (!isEqualAnyRight(A(0), A(0))) return "Fail 14" + if (!isEqualSameNullable(null, null)) return "Fail 15" + if (!isEqualSameNullable(A(0), A(0))) return "Fail 16" + if (isEqualSameNullable(null, A(0))) return "Fail 17" + if (isEqualSameNullable(A(0), null)) return "Fail 18" + if (isEqualSameNullable(A(0), A(1))) return "Fail 19" + if (!isEqualAnyNullableLeft(null, null)) return "Fail 20" + if (!isEqualAnyNullableLeft(A(0), A(0))) return "Fail 21" + if (isEqualAnyNullableLeft(A(0), 0)) return "Fail 22" + if (isEqualAnyNullableLeft(null, 0)) return "Fail 23" + if (isEqualAnyNullableLeft(A(0), null)) return "Fail 24" + if (isEqualAnyNullableLeft(A(0), A(1))) return "Fail 25" + if (!isEqualAnyNullableRight(null, null)) return "Fail 26" + if (!isEqualAnyNullableRight(A(0), A(0))) return "Fail 27" + if (isEqualAnyNullableRight(0, A(0))) return "Fail 28" + if (isEqualAnyNullableRight(0, null)) return "Fail 29" + if (isEqualAnyNullableRight(null, A(0))) return "Fail 30" + if (isEqualAnyNullableRight(A(0), A(1))) return "Fail 31" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt b/compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt new file mode 100644 index 00000000000..fdac846434f --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt @@ -0,0 +1,14 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: String) + +class B { + override fun equals(other: Any?) = true +} + +fun box(): String { + val x: Any? = B() + val y: A = A("") + if (x != y) return "Fail" + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt new file mode 100644 index 00000000000..7fc6d414460 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt @@ -0,0 +1,33 @@ +// !LANGUAGE: +InlineClasses + +inline class Inner(val x: Int) +inline class A(val x: Inner) + +var i = 0 + +fun set1(): A { + i = 1 + return A(Inner(0)) +} + +fun test1(n: Int): A { + if (i != 1) + throw IllegalStateException("Fail $n") + i = 0 + return A(Inner(0)) +} + +fun set1Boxed(): Any? = set1() +fun test1Boxed(n: Int): Any? = test1(n) + +fun box(): String { + try { + set1() == test1(1) + set1Boxed() == test1(2) + set1() == test1Boxed(3) + set1Boxed() == test1Boxed(4) + } catch (e: IllegalStateException) { + return e.message ?: "Fail no message" + } + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt new file mode 100644 index 00000000000..1f7ff01c87c --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt @@ -0,0 +1,32 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: String = "") + +var i = 0 + +fun set1(): A { + i = 1 + return A() +} + +fun test1(n: Int): A { + if (i != 1) + throw IllegalStateException("Fail $n") + i = 0 + return A() +} + +fun set1Boxed(): Any? = set1() +fun test1Boxed(n: Int): Any? = test1(n) + +fun box(): String { + try { + set1() == test1(1) + set1Boxed() == test1(2) + set1() == test1Boxed(3) + set1Boxed() == test1Boxed(4) + } catch (e: IllegalStateException) { + return e.message ?: "Fail no message" + } + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt new file mode 100644 index 00000000000..60f0ea4e27b --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt @@ -0,0 +1,32 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Any? = null) + +var i = 0 + +fun set1(): A { + i = 1 + return A() +} + +fun test1(n: Int): A { + if (i != 1) + throw IllegalStateException("Fail $n") + i = 0 + return A() +} + +fun set1Boxed(): Any? = set1() +fun test1Boxed(n: Int): Any? = test1(n) + +fun box(): String { + try { + set1() == test1(1) + set1Boxed() == test1(2) + set1() == test1Boxed(3) + set1Boxed() == test1Boxed(4) + } catch (e: IllegalStateException) { + return e.message ?: "Fail no message" + } + return "OK" +} diff --git a/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt new file mode 100644 index 00000000000..745e3497825 --- /dev/null +++ b/compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt @@ -0,0 +1,32 @@ +// !LANGUAGE: +InlineClasses + +inline class A(val x: Int = 0) + +var i = 0 + +fun set1(): A { + i = 1 + return A() +} + +fun test1(n: Int): A { + if (i != 1) + throw IllegalStateException("Fail $n") + i = 0 + return A() +} + +fun set1Boxed(): Any? = set1() +fun test1Boxed(n: Int): Any? = test1(n) + +fun box(): String { + try { + set1() == test1(1) + set1Boxed() == test1(2) + set1() == test1Boxed(3) + set1Boxed() == test1Boxed(4) + } catch (e: IllegalStateException) { + return e.message ?: "Fail no message" + } + return "OK" +} diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt new file mode 100644 index 00000000000..d24acf0f84a --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt @@ -0,0 +1,84 @@ +// FILE: inlineClasses.kt +inline class A(val x: Int) +inline class B(val x: String) +inline class C(val x: Any?) + +// FILE: a.kt + +// False +fun isNullVacuousLeftA(s: A) = s == null +fun isNullVacuousRightA(s: A) = null == s +// IFNONNULL +fun isNullLeftA(s: A?) = s == null +fun isNullRightA(s: A?) = null == s +// equals-impl0 +fun isEqualSameA(s: A, t: A) = s == t +// equals-impl +fun isEqualAnyLeftA(s: A, t: Any?) = s == t +// boxes +// fun isEqualAnyRightA(s: Any?, t: A) = s == t +// Intrinsics.areEqual +fun isEqualSameNullableA(s: A?, t: A?) = s == t +fun isEqualAnyNullableLeftA(s: A?, t: Any?) = s == t +fun isEqualAnyNullableRightA(s: Any?, t: A?) = s == t + +// FILE: b.kt + +// False +fun isNullVacuousLeftB(s: B) = s == null +fun isNullVacuousRightB(s: B) = null == s +// IFNONNULL +fun isNullLeftB(s: B?) = s == null +fun isNullRightB(s: B?) = null == s +// equals-impl0 +fun isEqualSameB(s: B, t: B) = s == t +// equals-impl +fun isEqualAnyLeftB(s: B, t: Any?) = s == t +// boxes +// fun isEqualAnyRightB(s: Any?, t: B) = s == t +// equals-impl0 +fun isEqualSameNullableB(s: B?, t: B?) = s == t +// equals-impl +fun isEqualAnyNullableLeftB(s: B?, t: Any?) = s == t +// boxes +// fun isEqualAnyNullableRightB(s: Any?, t: B?) = s == t + +// FILE: c.kt + +// False +fun isNullVacuousLeftC(s: C) = s == null +fun isNullVacuousRightC(s: C) = null == s +// IFNONULL +fun isNullLeftC(s: C?) = s == null +fun isNullRightC(s: C?) = null == s +// equals-impl0 +fun isEqualSameC(s: C, t: C) = s == t +// equals-impl +fun isEqualAnyLeftC(s: C, t: Any?) = s == t +// boxes +// fun isEqualAnyRightC(s: Any?, t: C) = s == t +// Intrinsics.areEqual +fun isEqualSameNullableC(s: C?, t: C?) = s == t +fun isEqualAnyNullableLeftC(s: C?, t: Any?) = s == t +fun isEqualAnyNullableRightC(s: Any?, 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 +// 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 +// 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 +// 3 INVOKESTATIC kotlin/jvm/internal/Intrinsics.areEqual \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/inlineClasses/resultApiDoesntUseBox.kt b/compiler/testData/codegen/bytecodeText/inlineClasses/resultApiDoesntUseBox.kt index 75b1967c77d..d8065034797 100644 --- a/compiler/testData/codegen/bytecodeText/inlineClasses/resultApiDoesntUseBox.kt +++ b/compiler/testData/codegen/bytecodeText/inlineClasses/resultApiDoesntUseBox.kt @@ -1,3 +1,4 @@ +// IGNORE_BACKEND: JVM // IGNORE_BACKEND: JVM_IR // WITH_COROUTINES // FILE: test.kt @@ -14,25 +15,24 @@ fun test() { val other = Result.success("nope") if (result == other) println("==") if (result != other) println("!=") - if (result.equals(other)) println("equals") - if (!result.equals(other)) println("!equals") + if (result.equals(other)) println("equals") // Boxes (JVM, JVM_IR) + if (!result.equals(other)) println("!equals") // Boxes (JVM, JVM_IR) println(result.hashCode()) println(result.toString()) - println("$result") + println("$result") // Boxes (JVM_IR) val ans1 = runCatching { 42 } - println(ans1) + println(ans1) // Boxes (JVM, JVM_IR) val ans2 = 42.runCatching { this } - println(ans2) + println(ans2) // Boxes (JVM, JVM_IR) println(result.getOrElse { "oops" }) println(result.getOrDefault("oops")) } // @TestKt.class: -// 0 INVOKESTATIC Result.box-impl -// 0 INVOKESTATIC Result.unbox-impl -// 0 Result\$Failure -// 46 Result \ No newline at end of file +// 0 INVOKESTATIC kotlin/Result.box-impl +// 0 INVOKEVIRTUAL kotlin/Result.unbox-impl +// 0 Result\$Failure \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index a9e920e2c15..fe776de50c8 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -12380,11 +12380,81 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); } + @TestMetadata("equalityChecksInlineClassNonNull.kt") + public void testEqualityChecksInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksMixedNullability.kt") + public void testEqualityChecksMixedNullability() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt"); + } + + @TestMetadata("equalityChecksNegatedInlineClassNonNull.kt") + public void testEqualityChecksNegatedInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNonNull.kt") + public void testEqualityChecksNegatedNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNullable.kt") + public void testEqualityChecksNegatedNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt"); + } + + @TestMetadata("equalityChecksNegatedPrimitive.kt") + public void testEqualityChecksNegatedPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt"); + } + + @TestMetadata("equalityChecksNonNull.kt") + public void testEqualityChecksNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt"); + } + + @TestMetadata("equalityChecksNullable.kt") + public void testEqualityChecksNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt"); + } + + @TestMetadata("equalityChecksPrimitive.kt") + public void testEqualityChecksPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt"); + } + @TestMetadata("equalityForBoxesOfNullableValuesOfInlineClass.kt") public void testEqualityForBoxesOfNullableValuesOfInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalityForBoxesOfNullableValuesOfInlineClass.kt"); } + @TestMetadata("equalsCallsLeftArgument.kt") + public void testEqualsCallsLeftArgument() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt"); + } + + @TestMetadata("equalsEvaluationOrderInlineClass.kt") + public void testEqualsEvaluationOrderInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt"); + } + + @TestMetadata("equalsEvaluationOrderNonNull.kt") + public void testEqualsEvaluationOrderNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt"); + } + + @TestMetadata("equalsEvaluationOrderNullable.kt") + public void testEqualsEvaluationOrderNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt"); + } + + @TestMetadata("equalsEvaluationOrderPrimitive.kt") + public void testEqualsEvaluationOrderPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt"); + } + @TestMetadata("equalsOperatorWithGenericCall.kt") public void testEqualsOperatorWithGenericCall() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalsOperatorWithGenericCall.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index 38b8c4ab57b..aedff5504a7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -2483,6 +2483,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/defaultParametersDontBox.kt"); } + @TestMetadata("equalsDoesNotBox.kt") + public void testEqualsDoesNotBox() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt"); + } + @TestMetadata("equalsIsCalledByInlineClass.kt") public void testEqualsIsCalledByInlineClass() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index fefc7c72395..f04f036f008 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12395,11 +12395,81 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); } + @TestMetadata("equalityChecksInlineClassNonNull.kt") + public void testEqualityChecksInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksMixedNullability.kt") + public void testEqualityChecksMixedNullability() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt"); + } + + @TestMetadata("equalityChecksNegatedInlineClassNonNull.kt") + public void testEqualityChecksNegatedInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNonNull.kt") + public void testEqualityChecksNegatedNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNullable.kt") + public void testEqualityChecksNegatedNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt"); + } + + @TestMetadata("equalityChecksNegatedPrimitive.kt") + public void testEqualityChecksNegatedPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt"); + } + + @TestMetadata("equalityChecksNonNull.kt") + public void testEqualityChecksNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt"); + } + + @TestMetadata("equalityChecksNullable.kt") + public void testEqualityChecksNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt"); + } + + @TestMetadata("equalityChecksPrimitive.kt") + public void testEqualityChecksPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt"); + } + @TestMetadata("equalityForBoxesOfNullableValuesOfInlineClass.kt") public void testEqualityForBoxesOfNullableValuesOfInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalityForBoxesOfNullableValuesOfInlineClass.kt"); } + @TestMetadata("equalsCallsLeftArgument.kt") + public void testEqualsCallsLeftArgument() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt"); + } + + @TestMetadata("equalsEvaluationOrderInlineClass.kt") + public void testEqualsEvaluationOrderInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt"); + } + + @TestMetadata("equalsEvaluationOrderNonNull.kt") + public void testEqualsEvaluationOrderNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt"); + } + + @TestMetadata("equalsEvaluationOrderNullable.kt") + public void testEqualsEvaluationOrderNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt"); + } + + @TestMetadata("equalsEvaluationOrderPrimitive.kt") + public void testEqualsEvaluationOrderPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt"); + } + @TestMetadata("equalsOperatorWithGenericCall.kt") public void testEqualsOperatorWithGenericCall() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalsOperatorWithGenericCall.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index aed78206b06..40e625794c9 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -11265,11 +11265,81 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); } + @TestMetadata("equalityChecksInlineClassNonNull.kt") + public void testEqualityChecksInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksMixedNullability.kt") + public void testEqualityChecksMixedNullability() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt"); + } + + @TestMetadata("equalityChecksNegatedInlineClassNonNull.kt") + public void testEqualityChecksNegatedInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNonNull.kt") + public void testEqualityChecksNegatedNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNullable.kt") + public void testEqualityChecksNegatedNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt"); + } + + @TestMetadata("equalityChecksNegatedPrimitive.kt") + public void testEqualityChecksNegatedPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt"); + } + + @TestMetadata("equalityChecksNonNull.kt") + public void testEqualityChecksNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt"); + } + + @TestMetadata("equalityChecksNullable.kt") + public void testEqualityChecksNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt"); + } + + @TestMetadata("equalityChecksPrimitive.kt") + public void testEqualityChecksPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt"); + } + @TestMetadata("equalityForBoxesOfNullableValuesOfInlineClass.kt") public void testEqualityForBoxesOfNullableValuesOfInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalityForBoxesOfNullableValuesOfInlineClass.kt"); } + @TestMetadata("equalsCallsLeftArgument.kt") + public void testEqualsCallsLeftArgument() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt"); + } + + @TestMetadata("equalsEvaluationOrderInlineClass.kt") + public void testEqualsEvaluationOrderInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt"); + } + + @TestMetadata("equalsEvaluationOrderNonNull.kt") + public void testEqualsEvaluationOrderNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt"); + } + + @TestMetadata("equalsEvaluationOrderNullable.kt") + public void testEqualsEvaluationOrderNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt"); + } + + @TestMetadata("equalsEvaluationOrderPrimitive.kt") + public void testEqualsEvaluationOrderPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt"); + } + @TestMetadata("equalsOperatorWithGenericCall.kt") public void testEqualsOperatorWithGenericCall() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalsOperatorWithGenericCall.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 1f78337ed46..ff6fae38a70 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -2453,6 +2453,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/defaultParametersDontBox.kt"); } + @TestMetadata("equalsDoesNotBox.kt") + public void testEqualsDoesNotBox() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/inlineClasses/equalsDoesNotBox.kt"); + } + @TestMetadata("equalsIsCalledByInlineClass.kt") public void testEqualsIsCalledByInlineClass() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inlineClasses/equalsIsCalledByInlineClass.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 5c13f571438..31239507cf4 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -9720,11 +9720,81 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); } + @TestMetadata("equalityChecksInlineClassNonNull.kt") + public void testEqualityChecksInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksMixedNullability.kt") + public void testEqualityChecksMixedNullability() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt"); + } + + @TestMetadata("equalityChecksNegatedInlineClassNonNull.kt") + public void testEqualityChecksNegatedInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNonNull.kt") + public void testEqualityChecksNegatedNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNullable.kt") + public void testEqualityChecksNegatedNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt"); + } + + @TestMetadata("equalityChecksNegatedPrimitive.kt") + public void testEqualityChecksNegatedPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt"); + } + + @TestMetadata("equalityChecksNonNull.kt") + public void testEqualityChecksNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt"); + } + + @TestMetadata("equalityChecksNullable.kt") + public void testEqualityChecksNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt"); + } + + @TestMetadata("equalityChecksPrimitive.kt") + public void testEqualityChecksPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt"); + } + @TestMetadata("equalityForBoxesOfNullableValuesOfInlineClass.kt") public void testEqualityForBoxesOfNullableValuesOfInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalityForBoxesOfNullableValuesOfInlineClass.kt"); } + @TestMetadata("equalsCallsLeftArgument.kt") + public void testEqualsCallsLeftArgument() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt"); + } + + @TestMetadata("equalsEvaluationOrderInlineClass.kt") + public void testEqualsEvaluationOrderInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt"); + } + + @TestMetadata("equalsEvaluationOrderNonNull.kt") + public void testEqualsEvaluationOrderNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt"); + } + + @TestMetadata("equalsEvaluationOrderNullable.kt") + public void testEqualsEvaluationOrderNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt"); + } + + @TestMetadata("equalsEvaluationOrderPrimitive.kt") + public void testEqualsEvaluationOrderPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt"); + } + @TestMetadata("equalsOperatorWithGenericCall.kt") public void testEqualsOperatorWithGenericCall() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalsOperatorWithGenericCall.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 4628998f68a..885f209f530 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10875,11 +10875,81 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inlineClasses/emptyConstructorForInlineClass.kt"); } + @TestMetadata("equalityChecksInlineClassNonNull.kt") + public void testEqualityChecksInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksMixedNullability.kt") + public void testEqualityChecksMixedNullability() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksMixedNullability.kt"); + } + + @TestMetadata("equalityChecksNegatedInlineClassNonNull.kt") + public void testEqualityChecksNegatedInlineClassNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedInlineClassNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNonNull.kt") + public void testEqualityChecksNegatedNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNonNull.kt"); + } + + @TestMetadata("equalityChecksNegatedNullable.kt") + public void testEqualityChecksNegatedNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedNullable.kt"); + } + + @TestMetadata("equalityChecksNegatedPrimitive.kt") + public void testEqualityChecksNegatedPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNegatedPrimitive.kt"); + } + + @TestMetadata("equalityChecksNonNull.kt") + public void testEqualityChecksNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNonNull.kt"); + } + + @TestMetadata("equalityChecksNullable.kt") + public void testEqualityChecksNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksNullable.kt"); + } + + @TestMetadata("equalityChecksPrimitive.kt") + public void testEqualityChecksPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalityChecksPrimitive.kt"); + } + @TestMetadata("equalityForBoxesOfNullableValuesOfInlineClass.kt") public void testEqualityForBoxesOfNullableValuesOfInlineClass() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalityForBoxesOfNullableValuesOfInlineClass.kt"); } + @TestMetadata("equalsCallsLeftArgument.kt") + public void testEqualsCallsLeftArgument() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsCallsLeftArgument.kt"); + } + + @TestMetadata("equalsEvaluationOrderInlineClass.kt") + public void testEqualsEvaluationOrderInlineClass() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderInlineClass.kt"); + } + + @TestMetadata("equalsEvaluationOrderNonNull.kt") + public void testEqualsEvaluationOrderNonNull() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNonNull.kt"); + } + + @TestMetadata("equalsEvaluationOrderNullable.kt") + public void testEqualsEvaluationOrderNullable() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderNullable.kt"); + } + + @TestMetadata("equalsEvaluationOrderPrimitive.kt") + public void testEqualsEvaluationOrderPrimitive() throws Exception { + runTest("compiler/testData/codegen/box/inlineClasses/equalsEvaluationOrderPrimitive.kt"); + } + @TestMetadata("equalsOperatorWithGenericCall.kt") public void testEqualsOperatorWithGenericCall() throws Exception { runTest("compiler/testData/codegen/box/inlineClasses/equalsOperatorWithGenericCall.kt");