提交 d48f9277 编写于 作者: I Ilmir Usmanov

JVM_IR: Do not unbox Result parameter in invoke if there is a bridge

since the bridge unboxes it.

 #KT-44141 Fixed
上级 0ddb603e
...@@ -16226,6 +16226,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT ...@@ -16226,6 +16226,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@Test
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@Test @Test
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
...@@ -629,6 +629,8 @@ class ExpressionCodegen( ...@@ -629,6 +629,8 @@ class ExpressionCodegen(
if (irFunction !is IrSimpleFunction) return if (irFunction !is IrSimpleFunction) return
// Skip Result's methods // Skip Result's methods
if (irFunction.parentAsClass.fqNameWhenAvailable == StandardNames.RESULT_FQ_NAME) return if (irFunction.parentAsClass.fqNameWhenAvailable == StandardNames.RESULT_FQ_NAME) return
// Do not unbox, if there is a bridge, which unboxes for us
if (hasBridge()) return
val index = (arg.symbol as? IrValueParameterSymbol)?.owner?.index ?: return val index = (arg.symbol as? IrValueParameterSymbol)?.owner?.index ?: return
val genericOrAnyOverride = irFunction.overriddenSymbols.any { val genericOrAnyOverride = irFunction.overriddenSymbols.any {
...@@ -637,7 +639,14 @@ class ExpressionCodegen( ...@@ -637,7 +639,14 @@ class ExpressionCodegen(
} || irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.LAMBDA_IMPL } || irFunction.parentAsClass.origin == JvmLoweredDeclarationOrigin.LAMBDA_IMPL
if (!genericOrAnyOverride) return if (!genericOrAnyOverride) return
StackValue.unboxInlineClass(OBJECT_TYPE, arg.type.toIrBasedKotlinType(), mv) StackValue.unboxInlineClass(OBJECT_TYPE, arg.type.erasedUpperBound.defaultType.toIrBasedKotlinType(), mv)
}
private fun hasBridge(): Boolean = irFunction.parentAsClass.declarations.any { function ->
function is IrFunction && function != irFunction &&
context.methodSignatureMapper.mapSignatureSkipGeneric(function).let {
it.asmMethod.name == signature.asmMethod.name && it.valueParameters == signature.valueParameters
}
} }
override fun visitFieldAccess(expression: IrFieldAccessExpression, data: BlockInfo): PromisedValue { override fun visitFieldAccess(expression: IrFieldAccessExpression, data: BlockInfo): PromisedValue {
......
// WITH_RUNTIME
// KJS_FULL_RUNTIME
fun <T : Result<*>> isSuccess(a: A<T>): String =
a.go {
it.isSuccess
}
class A<T> {
fun go(f: (T) -> Boolean): String =
if (f(Result.success(1) as T)) "OK" else "Fail"
}
fun box(): String = isSuccess(A<Result<Int>>())
...@@ -16226,6 +16226,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { ...@@ -16226,6 +16226,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@Test
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@Test @Test
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
...@@ -16226,6 +16226,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes ...@@ -16226,6 +16226,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@Test
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@Test @Test
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
...@@ -14222,6 +14222,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes ...@@ -14222,6 +14222,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt"); runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt");
...@@ -12177,6 +12177,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes ...@@ -12177,6 +12177,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt"); runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt");
...@@ -12177,6 +12177,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { ...@@ -12177,6 +12177,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt"); runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt");
...@@ -12242,6 +12242,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { ...@@ -12242,6 +12242,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt"); runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt");
...@@ -6648,6 +6648,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest ...@@ -6648,6 +6648,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt"); runTest("compiler/testData/codegen/box/inlineClasses/kt38680b.kt");
} }
@TestMetadata("kt44141.kt")
public void testKt44141() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/kt44141.kt");
}
@TestMetadata("mangledDefaultParameterFunction.kt") @TestMetadata("mangledDefaultParameterFunction.kt")
public void testMangledDefaultParameterFunction() throws Exception { public void testMangledDefaultParameterFunction() throws Exception {
runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt"); runTest("compiler/testData/codegen/box/inlineClasses/mangledDefaultParameterFunction.kt");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册