Fix == for inline classes with boxes
TODO generalize code generating object vs primitive equality #KT-25914 Fixed #KT-25981 Fixed #KT-25983 Fixed
This commit is contained in:
@@ -3210,9 +3210,32 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
@Nullable StackValue pregeneratedSubject,
|
@Nullable StackValue pregeneratedSubject,
|
||||||
@Nullable PrimitiveNumericComparisonInfo primitiveNumericComparisonInfo
|
@Nullable PrimitiveNumericComparisonInfo primitiveNumericComparisonInfo
|
||||||
) {
|
) {
|
||||||
|
if (left == null || right == null) {
|
||||||
|
return StackValue.operation(Type.VOID_TYPE, v -> {
|
||||||
|
v.aconst(null);
|
||||||
|
v.athrow();
|
||||||
|
return Unit.INSTANCE;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
KotlinType leftKotlinType = kotlinType(left);
|
||||||
|
KotlinType rightKotlinType = kotlinType(right);
|
||||||
|
boolean leftIsInlineClass = leftKotlinType != null && InlineClassesUtilsKt.isInlineClassType(leftKotlinType);
|
||||||
|
boolean rightIsInlineClass = rightKotlinType != null && InlineClassesUtilsKt.isInlineClassType(rightKotlinType);
|
||||||
|
|
||||||
Type leftType = pregeneratedSubject != null ? pregeneratedSubject.type : expressionType(left);
|
Type leftType = pregeneratedSubject != null ? pregeneratedSubject.type : expressionType(left);
|
||||||
Type rightType = expressionType(right);
|
Type rightType = expressionType(right);
|
||||||
|
|
||||||
|
boolean leftIsInlineClassWithPrimitiveEquality = leftIsInlineClass && isInlineClassTypeWithPrimitiveEquality(leftKotlinType);
|
||||||
|
boolean rightIsInlineClassWithPrimitiveEquality = rightIsInlineClass && isInlineClassTypeWithPrimitiveEquality(rightKotlinType);
|
||||||
|
|
||||||
|
boolean leftHasPrimitiveEquality = isPrimitive(leftType) && (!leftIsInlineClass || leftIsInlineClassWithPrimitiveEquality);
|
||||||
|
boolean rightHasPrimitiveEquality = isPrimitive(rightType) && (!rightIsInlineClass || rightIsInlineClassWithPrimitiveEquality);
|
||||||
|
|
||||||
|
if (leftIsInlineClass && !leftIsInlineClassWithPrimitiveEquality || rightIsInlineClass && !rightIsInlineClassWithPrimitiveEquality) {
|
||||||
|
return generateEqualityWithInlineClassesBoxing(left, leftType, right, rightType, opToken, pregeneratedSubject);
|
||||||
|
}
|
||||||
|
|
||||||
if (KtPsiUtil.isNullConstant(left)) {
|
if (KtPsiUtil.isNullConstant(left)) {
|
||||||
return genCmpWithNull(right, opToken, null);
|
return genCmpWithNull(right, opToken, null);
|
||||||
}
|
}
|
||||||
@@ -3221,51 +3244,55 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
return genCmpWithNull(left, opToken, pregeneratedSubject);
|
return genCmpWithNull(left, opToken, pregeneratedSubject);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isIntZero(left, leftType) && isIntPrimitive(rightType)) {
|
if (isIntZero(left, leftType) && rightHasPrimitiveEquality && isIntPrimitive(rightType)) {
|
||||||
return genCmpWithZero(right, opToken, null);
|
return genCmpWithZero(right, opToken, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isIntZero(right, rightType) && isIntPrimitive(leftType)) {
|
if (isIntZero(right, rightType) && leftHasPrimitiveEquality && isIntPrimitive(leftType)) {
|
||||||
return genCmpWithZero(left, opToken, pregeneratedSubject);
|
return genCmpWithZero(left, opToken, pregeneratedSubject);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pregeneratedSubject == null && left instanceof KtSafeQualifiedExpression &&
|
if (pregeneratedSubject == null && left instanceof KtSafeQualifiedExpression &&
|
||||||
isSelectorPureNonNullType((KtSafeQualifiedExpression) left) && isPrimitive(rightType)) {
|
isSelectorPureNonNullType((KtSafeQualifiedExpression) left) &&
|
||||||
|
isPrimitive(rightType) && rightHasPrimitiveEquality) {
|
||||||
return genCmpSafeCallToPrimitive((KtSafeQualifiedExpression) left, right, rightType, opToken);
|
return genCmpSafeCallToPrimitive((KtSafeQualifiedExpression) left, right, rightType, opToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPrimitive(leftType) && right instanceof KtSafeQualifiedExpression &&
|
if (isPrimitive(leftType) && leftHasPrimitiveEquality &&
|
||||||
|
right instanceof KtSafeQualifiedExpression &&
|
||||||
isSelectorPureNonNullType(((KtSafeQualifiedExpression) right))) {
|
isSelectorPureNonNullType(((KtSafeQualifiedExpression) right))) {
|
||||||
return genCmpPrimitiveToSafeCall(left, leftType, (KtSafeQualifiedExpression) right, opToken, pregeneratedSubject);
|
return genCmpPrimitiveToSafeCall(left, leftType, (KtSafeQualifiedExpression) right, opToken, pregeneratedSubject);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoxedToPrimitiveEquality.isApplicable(opToken, leftType, rightType)) {
|
if (!leftIsInlineClass && !rightIsInlineClass) {
|
||||||
return BoxedToPrimitiveEquality.create(
|
if (BoxedToPrimitiveEquality.isApplicable(opToken, leftType, rightType)) {
|
||||||
opToken,
|
return BoxedToPrimitiveEquality.create(
|
||||||
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
opToken,
|
||||||
genLazy(right, rightType), rightType,
|
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
||||||
myFrameMap
|
genLazy(right, rightType), rightType,
|
||||||
);
|
myFrameMap
|
||||||
}
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (PrimitiveToBoxedEquality.isApplicable(opToken, leftType, rightType)) {
|
if (PrimitiveToBoxedEquality.isApplicable(opToken, leftType, rightType)) {
|
||||||
return PrimitiveToBoxedEquality.create(
|
return PrimitiveToBoxedEquality.create(
|
||||||
opToken,
|
opToken,
|
||||||
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
||||||
genLazy(right, rightType), rightType
|
genLazy(right, rightType), rightType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PrimitiveToObjectEquality.isApplicable(opToken, leftType, rightType)) {
|
if (PrimitiveToObjectEquality.isApplicable(opToken, leftType, rightType)) {
|
||||||
return PrimitiveToObjectEquality.create(
|
return PrimitiveToObjectEquality.create(
|
||||||
opToken,
|
opToken,
|
||||||
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
genLazyUnlessProvided(pregeneratedSubject, left, leftType), leftType,
|
||||||
genLazy(right, rightType), rightType
|
genLazy(right, rightType), rightType
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (isPrimitive(leftType) != isPrimitive(rightType)) {
|
if (!leftIsInlineClass && !rightIsInlineClass && isPrimitive(leftType) != isPrimitive(rightType)) {
|
||||||
leftType = boxType(leftType);
|
leftType = boxType(leftType);
|
||||||
rightType = boxType(rightType);
|
rightType = boxType(rightType);
|
||||||
}
|
}
|
||||||
@@ -3297,6 +3324,38 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private StackValue generateEqualityWithInlineClassesBoxing(
|
||||||
|
@NotNull KtExpression left,
|
||||||
|
@NotNull Type leftType,
|
||||||
|
@NotNull KtExpression right,
|
||||||
|
@NotNull Type rightType,
|
||||||
|
@NotNull IElementType opToken,
|
||||||
|
@Nullable StackValue pregeneratedSubject
|
||||||
|
) {
|
||||||
|
KotlinType leftKotlinType = kotlinType(left);
|
||||||
|
KotlinType rightKotlinType = kotlinType(right);
|
||||||
|
|
||||||
|
StackValue leftValue = genLazyUnlessProvided(pregeneratedSubject, left, leftType);
|
||||||
|
StackValue rightValue = genLazy(right, rightType);
|
||||||
|
|
||||||
|
return StackValue.operation(Type.BOOLEAN_TYPE, v -> {
|
||||||
|
KotlinType nullableAnyType = state.getModule().getBuiltIns().getNullableAnyType();
|
||||||
|
|
||||||
|
leftValue.put(leftType, leftKotlinType, v);
|
||||||
|
StackValue.coerce(leftType, leftKotlinType, AsmTypes.OBJECT_TYPE, nullableAnyType, v);
|
||||||
|
|
||||||
|
rightValue.put(rightType, rightKotlinType, v);
|
||||||
|
StackValue.coerce(rightType, rightKotlinType, AsmTypes.OBJECT_TYPE, nullableAnyType, v);
|
||||||
|
|
||||||
|
genAreEqualCall(v);
|
||||||
|
|
||||||
|
if (opToken == KtTokens.EXCLEQ || opToken == KtTokens.EXCLEQEQEQ) {
|
||||||
|
genInvertBoolean(v);
|
||||||
|
}
|
||||||
|
return Unit.INSTANCE;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private boolean isEnumExpression(@Nullable KtExpression expression) {
|
private boolean isEnumExpression(@Nullable KtExpression expression) {
|
||||||
KotlinType expressionType = bindingContext.getType(expression);
|
KotlinType expressionType = bindingContext.getType(expression);
|
||||||
if (expressionType == null) return false;
|
if (expressionType == null) return false;
|
||||||
@@ -3362,8 +3421,8 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
/*tries to use IEEE 754 arithmetic*/
|
/*tries to use IEEE 754 arithmetic*/
|
||||||
private StackValue genEqualsForExpressionsPreferIeee754Arithmetic(
|
private StackValue genEqualsForExpressionsPreferIeee754Arithmetic(
|
||||||
@Nullable KtExpression left,
|
@NotNull KtExpression left,
|
||||||
@Nullable KtExpression right,
|
@NotNull KtExpression right,
|
||||||
@NotNull IElementType opToken,
|
@NotNull IElementType opToken,
|
||||||
@NotNull Type leftType,
|
@NotNull Type leftType,
|
||||||
@NotNull Type rightType,
|
@NotNull Type rightType,
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.codegen
|
|||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.builtins.UnsignedTypes
|
||||||
import org.jetbrains.kotlin.codegen.context.CodegenContext
|
import org.jetbrains.kotlin.codegen.context.CodegenContext
|
||||||
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext
|
import org.jetbrains.kotlin.codegen.context.FieldOwnerContext
|
||||||
import org.jetbrains.kotlin.codegen.context.PackageContext
|
import org.jetbrains.kotlin.codegen.context.PackageContext
|
||||||
@@ -36,6 +37,7 @@ import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation
|
|||||||
import org.jetbrains.kotlin.resolve.calls.callUtil.getFirstArgumentExpression
|
import org.jetbrains.kotlin.resolve.calls.callUtil.getFirstArgumentExpression
|
||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
|
||||||
|
import org.jetbrains.kotlin.resolve.isInlineClassType
|
||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver
|
import org.jetbrains.kotlin.resolve.scopes.receivers.TransientReceiver
|
||||||
@@ -322,7 +324,7 @@ fun initializeVariablesForDestructuredLambdaParameters(codegen: ExpressionCodege
|
|||||||
|
|
||||||
val destructuringDeclaration =
|
val destructuringDeclaration =
|
||||||
(DescriptorToSourceUtils.descriptorToDeclaration(parameterDescriptor) as? KtParameter)?.destructuringDeclaration
|
(DescriptorToSourceUtils.descriptorToDeclaration(parameterDescriptor) as? KtParameter)?.destructuringDeclaration
|
||||||
?: error("Destructuring declaration for descriptor $parameterDescriptor not found")
|
?: error("Destructuring declaration for descriptor $parameterDescriptor not found")
|
||||||
|
|
||||||
codegen.initializeDestructuringDeclarationVariables(
|
codegen.initializeDestructuringDeclarationVariables(
|
||||||
destructuringDeclaration,
|
destructuringDeclaration,
|
||||||
@@ -419,3 +421,13 @@ fun MethodNode.textifyMethodNode(): String {
|
|||||||
text.print(PrintWriter(sw))
|
text.print(PrintWriter(sw))
|
||||||
return "$sw"
|
return "$sw"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun KotlinType.isInlineClassTypeWithPrimitiveEquality(): Boolean {
|
||||||
|
if (!isInlineClassType()) return false
|
||||||
|
|
||||||
|
// Always treat unsigned types as inline classes with primitive equality
|
||||||
|
if (UnsignedTypes.isUnsignedType(this)) return true
|
||||||
|
|
||||||
|
// TODO support other inline classes that can be compared as underlying primitives
|
||||||
|
return false
|
||||||
|
}
|
||||||
+16
@@ -0,0 +1,16 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// IGNORE_BACKEND: JVM_IR, JS_IR, JS
|
||||||
|
|
||||||
|
inline class InlineFloat(val data: Float)
|
||||||
|
|
||||||
|
inline class InlineDouble(val data: Double)
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
if (InlineFloat(0.0f) == InlineFloat(-0.0f)) throw AssertionError()
|
||||||
|
if (InlineFloat(Float.NaN) != InlineFloat(Float.NaN)) throw AssertionError()
|
||||||
|
|
||||||
|
if (InlineDouble(0.0) == InlineDouble(-0.0)) throw AssertionError()
|
||||||
|
if (InlineDouble(Double.NaN) != InlineDouble(Double.NaN)) throw AssertionError()
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
|
||||||
|
inline class Z(val data: Int) {
|
||||||
|
override fun equals(other: Any?): Boolean =
|
||||||
|
other is Z &&
|
||||||
|
data % 256 == other.data % 256
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
if (Z(0) != Z(256)) throw AssertionError()
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// IGNORE_BACKEND: JVM_IR, JS_IR, JS
|
||||||
|
|
||||||
|
inline class Z(val value: Int)
|
||||||
|
|
||||||
|
fun eq(a: Z?, b: Z) = a == b
|
||||||
|
|
||||||
|
fun eqq(a: Z, b: Z?) = a == b
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
if (!eq(Z(1), Z(1))) throw AssertionError()
|
||||||
|
if (eq(Z(1), Z(2))) throw AssertionError()
|
||||||
|
if (eq(null, Z(0))) throw AssertionError()
|
||||||
|
|
||||||
|
if (!eqq(Z(1), Z(1))) throw AssertionError()
|
||||||
|
if (eqq(Z(1), Z(2))) throw AssertionError()
|
||||||
|
if (eqq(Z(0), null)) throw AssertionError()
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
+15
@@ -11445,6 +11445,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt")
|
||||||
|
public void testInlineClassEqualityShouldUseTotalOrderForFloatingPointData() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||||
public void testInlineClassImplementsCollection() throws Exception {
|
public void testInlineClassImplementsCollection() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||||
@@ -11455,6 +11460,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassWithCustomEquals.kt")
|
||||||
|
public void testInlineClassWithCustomEquals() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassesCheckCast.kt")
|
@TestMetadata("inlineClassesCheckCast.kt")
|
||||||
public void testInlineClassesCheckCast() throws Exception {
|
public void testInlineClassesCheckCast() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
||||||
@@ -11490,6 +11500,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableEqeqNonNull.kt")
|
||||||
|
public void testNullableEqeqNonNull() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("passInlineClassAsVararg.kt")
|
@TestMetadata("passInlineClassAsVararg.kt")
|
||||||
public void testPassInlineClassAsVararg() throws Exception {
|
public void testPassInlineClassAsVararg() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
||||||
|
|||||||
+15
@@ -11445,6 +11445,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt")
|
||||||
|
public void testInlineClassEqualityShouldUseTotalOrderForFloatingPointData() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||||
public void testInlineClassImplementsCollection() throws Exception {
|
public void testInlineClassImplementsCollection() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||||
@@ -11455,6 +11460,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassWithCustomEquals.kt")
|
||||||
|
public void testInlineClassWithCustomEquals() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassesCheckCast.kt")
|
@TestMetadata("inlineClassesCheckCast.kt")
|
||||||
public void testInlineClassesCheckCast() throws Exception {
|
public void testInlineClassesCheckCast() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
||||||
@@ -11490,6 +11500,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableEqeqNonNull.kt")
|
||||||
|
public void testNullableEqeqNonNull() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("passInlineClassAsVararg.kt")
|
@TestMetadata("passInlineClassAsVararg.kt")
|
||||||
public void testPassInlineClassAsVararg() throws Exception {
|
public void testPassInlineClassAsVararg() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
||||||
|
|||||||
+15
@@ -11445,6 +11445,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt")
|
||||||
|
public void testInlineClassEqualityShouldUseTotalOrderForFloatingPointData() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassImplementsCollection.kt")
|
@TestMetadata("inlineClassImplementsCollection.kt")
|
||||||
public void testInlineClassImplementsCollection() throws Exception {
|
public void testInlineClassImplementsCollection() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassImplementsCollection.kt");
|
||||||
@@ -11455,6 +11460,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassWithCustomEquals.kt")
|
||||||
|
public void testInlineClassWithCustomEquals() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassesCheckCast.kt")
|
@TestMetadata("inlineClassesCheckCast.kt")
|
||||||
public void testInlineClassesCheckCast() throws Exception {
|
public void testInlineClassesCheckCast() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
||||||
@@ -11490,6 +11500,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableEqeqNonNull.kt")
|
||||||
|
public void testNullableEqeqNonNull() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("passInlineClassAsVararg.kt")
|
@TestMetadata("passInlineClassAsVararg.kt")
|
||||||
public void testPassInlineClassAsVararg() throws Exception {
|
public void testPassInlineClassAsVararg() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
||||||
|
|||||||
+15
@@ -10025,11 +10025,21 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt")
|
||||||
|
public void testInlineClassEqualityShouldUseTotalOrderForFloatingPointData() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassValuesInsideStrings.kt")
|
@TestMetadata("inlineClassValuesInsideStrings.kt")
|
||||||
public void testInlineClassValuesInsideStrings() throws Exception {
|
public void testInlineClassValuesInsideStrings() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassWithCustomEquals.kt")
|
||||||
|
public void testInlineClassWithCustomEquals() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassesCheckCast.kt")
|
@TestMetadata("inlineClassesCheckCast.kt")
|
||||||
public void testInlineClassesCheckCast() throws Exception {
|
public void testInlineClassesCheckCast() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
||||||
@@ -10065,6 +10075,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableEqeqNonNull.kt")
|
||||||
|
public void testNullableEqeqNonNull() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("passInlineClassAsVararg.kt")
|
@TestMetadata("passInlineClassAsVararg.kt")
|
||||||
public void testPassInlineClassAsVararg() throws Exception {
|
public void testPassInlineClassAsVararg() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
||||||
|
|||||||
+15
@@ -11075,11 +11075,21 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassAsLastExpressionInInLambda.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt")
|
||||||
|
public void testInlineClassEqualityShouldUseTotalOrderForFloatingPointData() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassEqualityShouldUseTotalOrderForFloatingPointData.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassValuesInsideStrings.kt")
|
@TestMetadata("inlineClassValuesInsideStrings.kt")
|
||||||
public void testInlineClassValuesInsideStrings() throws Exception {
|
public void testInlineClassValuesInsideStrings() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassValuesInsideStrings.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineClassWithCustomEquals.kt")
|
||||||
|
public void testInlineClassWithCustomEquals() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassWithCustomEquals.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineClassesCheckCast.kt")
|
@TestMetadata("inlineClassesCheckCast.kt")
|
||||||
public void testInlineClassesCheckCast() throws Exception {
|
public void testInlineClassesCheckCast() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/inlineClassesCheckCast.kt");
|
||||||
@@ -11115,6 +11125,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/noAssertionsOnInlineClassBasedOnNullableType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("nullableEqeqNonNull.kt")
|
||||||
|
public void testNullableEqeqNonNull() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/nullableEqeqNonNull.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("passInlineClassAsVararg.kt")
|
@TestMetadata("passInlineClassAsVararg.kt")
|
||||||
public void testPassInlineClassAsVararg() throws Exception {
|
public void testPassInlineClassAsVararg() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/passInlineClassAsVararg.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user