diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index 0e5acc9195d..ae540bfc9f9 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -14922,6 +14922,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/fir/ClassBuilder.kt"); } + @Test + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } + @Test @TestMetadata("ConstValAccess.kt") public void testConstValAccess() throws Exception { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractTarget.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractTarget.kt index 386134f6755..8d355b69469 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractTarget.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirAbstractTarget.kt @@ -8,9 +8,12 @@ package org.jetbrains.kotlin.fir abstract class FirAbstractTarget( override val labelName: String? ) : FirTarget { - override lateinit var labeledElement: E + protected abstract var _labeledElement: E + + final override val labeledElement: E + get() = _labeledElement override fun bind(element: E) { - labeledElement = element + _labeledElement = element } -} \ No newline at end of file +} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt index 95c342b43b3..8242d979537 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirFunctionTarget.kt @@ -6,8 +6,17 @@ package org.jetbrains.kotlin.fir import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol class FirFunctionTarget( labelName: String?, val isLambda: Boolean -) : FirAbstractTarget>(labelName) \ No newline at end of file +) : FirAbstractTarget>(labelName) { + private lateinit var targetSymbol: FirFunctionSymbol<*> + + override var _labeledElement: FirFunction<*> + get() = targetSymbol.fir + set(value) { + targetSymbol = value.symbol + } +} diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLoopTarget.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLoopTarget.kt index cfbb3e56c50..a6f223939ed 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLoopTarget.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirLoopTarget.kt @@ -9,4 +9,6 @@ import org.jetbrains.kotlin.fir.expressions.FirLoop class FirLoopTarget( labelName: String? -) : FirAbstractTarget(labelName) \ No newline at end of file +) : FirAbstractTarget(labelName) { + override lateinit var _labeledElement: FirLoop +} diff --git a/compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt b/compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt new file mode 100644 index 00000000000..96c4aa504e4 --- /dev/null +++ b/compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt @@ -0,0 +1,20 @@ +class ASTNode +class Wrap(val message: String) + +typealias WrappingStrategy = (childElement: ASTNode) -> Wrap? + +fun getWrappingStrategy(): WrappingStrategy { + return wrap@{ childElement -> + Wrap("OK").let { + return@wrap it + } + } +} + +fun getWrapAfterAnnotation(childElement: ASTNode): Wrap? { + return Wrap("OK") +} + +fun box(): String { + return getWrappingStrategy().invoke(ASTNode())?.message ?: "fail" +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index d27a6017dc3..ed3ae9e79b2 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -14922,6 +14922,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/fir/ClassBuilder.kt"); } + @Test + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } + @Test @TestMetadata("ConstValAccess.kt") public void testConstValAccess() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index 6109fcb788c..77c6da7ab89 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -14922,6 +14922,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/fir/ClassBuilder.kt"); } + @Test + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } + @Test @TestMetadata("ConstValAccess.kt") public void testConstValAccess() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 4b6fff7f9d9..4f8d4ee9bff 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -12318,6 +12318,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/fir/ClassBuilder.kt"); } + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } + @TestMetadata("ConstValAccess.kt") public void testConstValAccess() throws Exception { runTest("compiler/testData/codegen/box/fir/ConstValAccess.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index a498cd42b68..582c0430424 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -10940,6 +10940,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes public void testAllFilesPresentInFir() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true); } + + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } } @TestMetadata("compiler/testData/codegen/box/fullJdk") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 7a299e52f78..1447565a8b0 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -10397,6 +10397,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { public void testAllFilesPresentInFir() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true); } + + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } } @TestMetadata("compiler/testData/codegen/box/fullJdk") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 22993aa10d8..31f67c6f581 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -10397,6 +10397,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { public void testAllFilesPresentInFir() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/fir"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true); } + + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } } @TestMetadata("compiler/testData/codegen/box/fullJdk") diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index f1d8f3394d4..e7e2af7b7a7 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -5228,6 +5228,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest public void testAllFilesPresentInFir() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/fir"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true); } + + @TestMetadata("classCanNotBeCastedToVoid.kt") + public void testClassCanNotBeCastedToVoid() throws Exception { + runTest("compiler/testData/codegen/box/fir/classCanNotBeCastedToVoid.kt"); + } } @TestMetadata("compiler/testData/codegen/box/fullJdk")