[FIR] KT-55666: Support labels to local functions

^KT-55666 Fixed
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
index 40fcf27..f660d12 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java
@@ -508,6 +508,12 @@
         }
 
         @Test
+        @TestMetadata("kt55666.kt")
+        public void testKt55666() throws Exception {
+            runTest("compiler/testData/diagnostics/tests/kt55666.kt");
+        }
+
+        @Test
         @TestMetadata("kt55733.kt")
         public void testKt55733() throws Exception {
             runTest("compiler/testData/diagnostics/tests/kt55733.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
index 4fd3733..8299dca 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java
@@ -508,6 +508,12 @@
         }
 
         @Test
+        @TestMetadata("kt55666.kt")
+        public void testKt55666() throws Exception {
+            runTest("compiler/testData/diagnostics/tests/kt55666.kt");
+        }
+
+        @Test
         @TestMetadata("kt55733.kt")
         public void testKt55733() throws Exception {
             runTest("compiler/testData/diagnostics/tests/kt55733.kt");
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
index b5ac344..f0ffe45 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java
@@ -508,6 +508,12 @@
         }
 
         @Test
+        @TestMetadata("kt55666.kt")
+        public void testKt55666() throws Exception {
+            runTest("compiler/testData/diagnostics/tests/kt55666.kt");
+        }
+
+        @Test
         @TestMetadata("kt55733.kt")
         public void testKt55733() throws Exception {
             runTest("compiler/testData/diagnostics/tests/kt55733.kt");
diff --git a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt
index 863d838..b506970 100644
--- a/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt
+++ b/compiler/fir/raw-fir/light-tree2fir/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt
@@ -1676,7 +1676,7 @@
             }
         } else {
             val functionName = identifier.nameAsSafeName()
-            val labelName = runIf(!functionName.isSpecial) { functionName.identifier }
+            val labelName = context.getLastLabel(functionDeclaration)?.name ?: runIf(!functionName.isSpecial) { functionName.identifier }
             target = FirFunctionTarget(labelName, isLambda = false)
             functionSymbol = FirNamedFunctionSymbol(callableIdForName(functionName))
             FirSimpleFunctionBuilder().apply {
diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
index fd81b57..4ed44fb 100644
--- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
+++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt
@@ -1435,7 +1435,7 @@
                 FirSimpleFunctionBuilder().apply {
                     receiverParameter = receiverType?.convertToReceiverParameter()
                     name = function.nameAsSafeName
-                    labelName = runIf(!name.isSpecial) { name.identifier }
+                    labelName = context.getLastLabel(function)?.name ?: runIf(!name.isSpecial) { name.identifier }
                     symbol = FirNamedFunctionSymbol(callableIdForName(function.nameAsSafeName)).also { functionSymbol = it }
                     dispatchReceiverType = currentDispatchReceiverType()
                     status = FirDeclarationStatusImpl(
diff --git a/compiler/testData/diagnostics/tests/kt55666.kt b/compiler/testData/diagnostics/tests/kt55666.kt
new file mode 100644
index 0000000..1a817f3
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/kt55666.kt
@@ -0,0 +1,19 @@
+// FIR_IDENTICAL
+
+inline fun l2f1(p: () -> Unit) {}
+
+fun label2simple1() {
+    l2f1 { return@label2simple1 }
+
+    fun local() {
+        l2f1 { return@local }
+    }
+
+    labelLocal@ fun labelledLocal() {
+        l2f1 { return@labelLocal }
+    }
+}
+
+fun main() {
+    label2simple1()
+}
diff --git a/compiler/testData/diagnostics/tests/kt55666.txt b/compiler/testData/diagnostics/tests/kt55666.txt
new file mode 100644
index 0000000..2b4902b
--- /dev/null
+++ b/compiler/testData/diagnostics/tests/kt55666.txt
@@ -0,0 +1,5 @@
+package
+
+public inline fun l2f1(/*0*/ p: () -> kotlin.Unit): kotlin.Unit
+public fun label2simple1(): kotlin.Unit
+public fun main(): kotlin.Unit
diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
index 84b681d..a522fdc 100644
--- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
+++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java
@@ -508,6 +508,12 @@
         }
 
         @Test
+        @TestMetadata("kt55666.kt")
+        public void testKt55666() throws Exception {
+            runTest("compiler/testData/diagnostics/tests/kt55666.kt");
+        }
+
+        @Test
         @TestMetadata("kt55733.kt")
         public void testKt55733() throws Exception {
             runTest("compiler/testData/diagnostics/tests/kt55733.kt");