diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt index 60c7fab91d2..e9193a70add 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/IrIntrinsicMethods.kt @@ -51,13 +51,13 @@ class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) { Key( kotlinJvmInternalUnsafe, null, - "access\$monitorEnter\$0", + "access\$monitorEnter", listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe()) ) to MonitorInstruction.MONITOR_ENTER, Key( kotlinJvmInternalUnsafe, null, - "access\$monitorExit\$1", + "access\$monitorExit", listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe()) ) to MonitorInstruction.MONITOR_EXIT, Key( diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt index 313ce67de55..f35e7d3da2c 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt @@ -459,6 +459,9 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle private fun IrFunction.accessorName(superQualifier: IrClassSymbol?): Name { val jvmName = context.methodSignatureMapper.mapFunctionName(this) val suffix = when { + // Accessors for top level functions never need a suffix. + isTopLevel -> "" + // The only function accessors placed on interfaces are for private functions and JvmDefault implementations. // The two cannot clash. parentAsClass.isJvmInterface && Visibilities.isPrivate(visibility) -> "" diff --git a/compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt b/compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt new file mode 100644 index 00000000000..2481400aafd --- /dev/null +++ b/compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt @@ -0,0 +1,17 @@ +// TARGET_BACKEND: JVM +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_RUNTIME + +import kotlin.jvm.internal.unsafe.* + +@Suppress("INVISIBLE_MEMBER") +fun box(): String { + val lock = Any() + monitorEnter(lock) + try { + return "OK" + } + finally { + monitorExit(lock) + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 99d858eedc1..2c721575850 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -14275,6 +14275,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/intrinsics/longRangeWithExplicitDot.kt"); } + @TestMetadata("monitorEnterMonitorExit.kt") + public void testMonitorEnterMonitorExit() throws Exception { + runTest("compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt"); + } + @TestMetadata("nonShortCircuitAnd.kt") public void testNonShortCircuitAnd() throws Exception { runTest("compiler/testData/codegen/box/intrinsics/nonShortCircuitAnd.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index def7b4e2ef9..22a0fc73c29 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14275,6 +14275,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/intrinsics/longRangeWithExplicitDot.kt"); } + @TestMetadata("monitorEnterMonitorExit.kt") + public void testMonitorEnterMonitorExit() throws Exception { + runTest("compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt"); + } + @TestMetadata("nonShortCircuitAnd.kt") public void testNonShortCircuitAnd() throws Exception { runTest("compiler/testData/codegen/box/intrinsics/nonShortCircuitAnd.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index ff3adba00b5..2447addb236 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -13125,6 +13125,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/intrinsics/longRangeWithExplicitDot.kt"); } + @TestMetadata("monitorEnterMonitorExit.kt") + public void testMonitorEnterMonitorExit() throws Exception { + runTest("compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt"); + } + @TestMetadata("nonShortCircuitAnd.kt") public void testNonShortCircuitAnd() throws Exception { runTest("compiler/testData/codegen/box/intrinsics/nonShortCircuitAnd.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index cfe649a8783..0d572f0471b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -13125,6 +13125,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/intrinsics/longRangeWithExplicitDot.kt"); } + @TestMetadata("monitorEnterMonitorExit.kt") + public void testMonitorEnterMonitorExit() throws Exception { + runTest("compiler/testData/codegen/box/intrinsics/monitorEnterMonitorExit.kt"); + } + @TestMetadata("nonShortCircuitAnd.kt") public void testNonShortCircuitAnd() throws Exception { runTest("compiler/testData/codegen/box/intrinsics/nonShortCircuitAnd.kt");