diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt index 2cde28b389f..4acc690d607 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/utils/NameTables.kt @@ -370,7 +370,7 @@ class NameTables( declaration !is IrDeclarationWithName -> return - declaration.isEffectivelyExternal() -> + declaration.isEffectivelyExternal() && (declaration.getJsModule() == null || declaration.isJsNonModule()) -> globalNames.declareStableName(declaration, declaration.getJsNameOrKotlinName().identifier) else -> diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java index e31dc7a3581..58ea2ea8827 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrBoxJsTestGenerated.java @@ -4948,6 +4948,11 @@ public class IrBoxJsTestGenerated extends AbstractIrBoxJsTest { runTest("js/js.translator/testData/box/jsModule/externalFunction.kt"); } + @TestMetadata("externalFunctionNameClash.kt") + public void testExternalFunctionNameClash() throws Exception { + runTest("js/js.translator/testData/box/jsModule/externalFunctionNameClash.kt"); + } + @TestMetadata("externalFunctionPlain.kt") public void testExternalFunctionPlain() throws Exception { runTest("js/js.translator/testData/box/jsModule/externalFunctionPlain.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 11fd58bcfdb..866dc42ab3b 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -4963,6 +4963,11 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { runTest("js/js.translator/testData/box/jsModule/externalFunction.kt"); } + @TestMetadata("externalFunctionNameClash.kt") + public void testExternalFunctionNameClash() throws Exception { + runTest("js/js.translator/testData/box/jsModule/externalFunctionNameClash.kt"); + } + @TestMetadata("externalFunctionPlain.kt") public void testExternalFunctionPlain() throws Exception { runTest("js/js.translator/testData/box/jsModule/externalFunctionPlain.kt"); diff --git a/js/js.translator/testData/box/jsModule/externalFunctionNameClash.js b/js/js.translator/testData/box/jsModule/externalFunctionNameClash.js new file mode 100644 index 00000000000..4309205c55c --- /dev/null +++ b/js/js.translator/testData/box/jsModule/externalFunctionNameClash.js @@ -0,0 +1,5 @@ +define("lib", [], function() { + return function(y) { + return 23 + y; + }; +}); \ No newline at end of file diff --git a/js/js.translator/testData/box/jsModule/externalFunctionNameClash.kt b/js/js.translator/testData/box/jsModule/externalFunctionNameClash.kt new file mode 100644 index 00000000000..d4bfe777609 --- /dev/null +++ b/js/js.translator/testData/box/jsModule/externalFunctionNameClash.kt @@ -0,0 +1,14 @@ +// EXPECTED_REACHABLE_NODES: 1284 +// MODULE_KIND: AMD +package foo + +@JsModule("lib") +external fun foo(y: Int): Int = definedExternally + +fun foo(y: String): String = y + "K" + +fun box(): String { + val foo10 = foo(10) + if (foo10 != 33) return "Fail: $foo10" + return "OK" +} \ No newline at end of file