[Wasm] Fix invalid cast generation for inline classes
This commit is contained in:
+6
@@ -23069,6 +23069,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
-9
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.backend.common.lower.AbstractValueUsageTransformer
|
||||
import org.jetbrains.kotlin.backend.common.pop
|
||||
import org.jetbrains.kotlin.backend.common.push
|
||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsCommonBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.realOverrideTarget
|
||||
@@ -136,14 +135,6 @@ class AutoboxingTransformer(context: JsCommonBackendContext) : AbstractValueUsag
|
||||
return res
|
||||
}
|
||||
|
||||
override fun visitFunction(declaration: IrFunction): IrStatement {
|
||||
return super.visitFunction(declaration)
|
||||
}
|
||||
|
||||
override fun visitVararg(expression: IrVararg): IrExpression {
|
||||
return super.visitVararg(expression)
|
||||
}
|
||||
|
||||
override fun IrExpression.useAsResult(enclosing: IrExpression): IrExpression {
|
||||
if (processingReturnStack.lastOrNull()?.value == enclosing && enclosing is IrReturnableBlock) {
|
||||
return useReturnableExpressionAsType(enclosing.type)
|
||||
|
||||
+5
-1
@@ -739,7 +739,11 @@ class BodyGenerator(
|
||||
|
||||
// REF -> REF -> REF_CAST
|
||||
if (!expectedIsPrimitive) {
|
||||
generateRefNullCast(actualTypeErased, expectedTypeErased)
|
||||
if (expectedClassErased.isSubclassOf(actualClassErased)) {
|
||||
generateRefNullCast(actualTypeErased, expectedTypeErased)
|
||||
} else {
|
||||
body.buildUnreachable()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Vendored
+8
@@ -0,0 +1,8 @@
|
||||
// WITH_STDLIB
|
||||
// WORKS_WHEN_VALUE_CLASS
|
||||
// LANGUAGE: +ValueClasses
|
||||
|
||||
inline class X(val i: Int)
|
||||
fun unbox(x: X?): Int = checkNotNull(x).i
|
||||
|
||||
fun box(): String = if (unbox(X(42)) == 42) "OK" else "Fail"
|
||||
+6
@@ -22127,6 +22127,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
+6
@@ -23069,6 +23069,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
+5
@@ -18435,6 +18435,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
}
|
||||
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/useInlineClassesInsideElvisOperator.kt", TransformersFunctions.getReplaceOptionalJvmInlineAnnotationWithReal());
|
||||
|
||||
+6
@@ -17479,6 +17479,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
+6
@@ -17497,6 +17497,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
+6
@@ -17497,6 +17497,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
+5
@@ -15465,6 +15465,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
}
|
||||
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/useInlineClassesInsideElvisOperator.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
|
||||
+8
@@ -16929,6 +16929,7 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
register("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocation.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/useInlineClassesInsideElvisOperator.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/useInlineClassesInsideElvisOperatorGeneric.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
register("compiler/testData/codegen/box/inlineClasses/useInlineFunctionInsideInlineClass.kt", TransformersFunctions.getRemoveOptionalJvmInlineAnnotation());
|
||||
@@ -19302,6 +19303,13 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfAnyBeforeMethodInvocationGeneric2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("unboxValueOfNullableInlineClassUsingInlineFunction.kt")
|
||||
public void testUnboxValueOfNullableInlineClassUsingInlineFunction() throws Exception {
|
||||
// There is a registered source transformer for the testcase: TransformersFunctions.getRemoveOptionalJvmInlineAnnotation()
|
||||
runTest("compiler/testData/codegen/box/inlineClasses/unboxValueOfNullableInlineClassUsingInlineFunction.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("useInlineClassesInsideElvisOperator.kt")
|
||||
public void testUseInlineClassesInsideElvisOperator() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user