KT-42018 explicitly cast inline class values in safe-as
This commit is contained in:
Generated
+5
@@ -14182,6 +14182,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
+7
-1
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
|
import org.jetbrains.kotlin.ir.util.isInlined
|
||||||
import org.jetbrains.kotlin.ir.util.render
|
import org.jetbrains.kotlin.ir.util.render
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
||||||
@@ -125,10 +126,15 @@ private class TypeOperatorLowering(private val context: JvmBackendContext) : Fil
|
|||||||
IrStatementOrigin.SAFE_CALL,
|
IrStatementOrigin.SAFE_CALL,
|
||||||
irType = context.irBuiltIns.anyNType
|
irType = context.irBuiltIns.anyNType
|
||||||
) { valueSymbol ->
|
) { valueSymbol ->
|
||||||
|
val thenPart =
|
||||||
|
if (valueSymbol.owner.type.isInlined())
|
||||||
|
lowerCast(irGet(valueSymbol.owner), expression.typeOperand)
|
||||||
|
else
|
||||||
|
irGet(valueSymbol.owner)
|
||||||
irIfThenElse(
|
irIfThenElse(
|
||||||
expression.type,
|
expression.type,
|
||||||
lowerInstanceOf(irGet(valueSymbol.owner), expression.typeOperand.makeNotNull()),
|
lowerInstanceOf(irGet(valueSymbol.owner), expression.typeOperand.makeNotNull()),
|
||||||
irGet(valueSymbol.owner),
|
thenPart,
|
||||||
irNull(expression.type)
|
irNull(expression.type)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
// KJS_WITH_FULL_RUNTIME
|
||||||
|
|
||||||
|
fun testUIntSafeAsInt(x: UInt) = x as? Int
|
||||||
|
|
||||||
|
fun box(): String = if (testUIntSafeAsInt(1U) != null) "fail" else "OK"
|
||||||
+5
@@ -15582,6 +15582,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
+5
@@ -15582,6 +15582,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
+5
@@ -14182,6 +14182,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
Generated
+5
@@ -12182,6 +12182,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
Generated
+5
@@ -12182,6 +12182,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
+5
@@ -12247,6 +12247,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntArraySortExample.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
Generated
+5
@@ -6702,6 +6702,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
|||||||
runTest("compiler/testData/codegen/box/inlineClasses/typeChecksForInlineClasses.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/typeChecksForInlineClasses.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("UIntSafeAsInt.kt")
|
||||||
|
public void testUIntSafeAsInt() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/inlineClasses/UIntSafeAsInt.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
@TestMetadata("unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt")
|
||||||
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
public void testUnboxNullableValueOfInlineClassWithNonNullUnderlyingType() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
runTest("compiler/testData/codegen/box/inlineClasses/unboxNullableValueOfInlineClassWithNonNullUnderlyingType.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user