diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 6545e1dd6a6..8d7828e88d9 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -4015,6 +4015,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/literalInWhenSubject.kt"); } + @Test + @TestMetadata("longElvisChain.kt") + public void testLongElvisChain() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt"); + } + @Test @TestMetadata("multipleCasts.kt") public void testMultipleCasts() throws Exception { diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index 1d8e23bbb57..f4bdc07b919 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -3549,6 +3549,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/literalInWhenSubject.kt"); } + @TestMetadata("longElvisChain.kt") + public void testLongElvisChain() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt"); + } + @TestMetadata("multipleCasts.kt") public void testMultipleCasts() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/multipleCasts.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.fir.txt b/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.fir.txt new file mode 100644 index 00000000000..e9a4fafde4d --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.fir.txt @@ -0,0 +1,20 @@ +FILE: longElvisChain.kt + public final fun test_1(): R|kotlin/Unit| { + lval a: R|kotlin/Throwable?| = Null(null) + lval b: R|kotlin/Unit?| = Null(null) + lval c: R|kotlin/Throwable| = R|/a| ?: R|/b|?.{ $subj$.R|kotlin/let|( = let@fun (it: R|kotlin/Unit|): R|kotlin/Nothing| { + ^test_1 R|/it| + } + ) } ?: ^test_1 Unit + R|/c|!! + throw R|/a| + } + public final fun test_2(): R|kotlin/Unit| { + lval a: R|kotlin/Throwable?| = Null(null) + lval b: R|kotlin/Unit?| = Null(null) + lval c: R|kotlin/Throwable| = R|/a| ?: R|/b|?.{ $subj$.R|kotlin/let|( = let@fun (it: R|kotlin/Unit|): R|kotlin/Nothing| { + ^test_2 R|/it| + } + ) } ?: ^test_2 Unit + throw R|/a| + } diff --git a/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt b/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt new file mode 100644 index 00000000000..05942b21566 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt @@ -0,0 +1,17 @@ +// ISSUE: KT-49249 +// WITH_STDLIB + +fun test_1() { + val a: Throwable? = null; + val b: Unit? = null + val c = a ?: b?.let { return it } ?: return + c!! + throw a +} + +fun test_2() { + val a: Throwable? = null; + val b: Unit? = null + val c = a ?: b?.let { return it } ?: return + throw a +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index aa2af4d85d6..e7bee993dfb 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -4015,6 +4015,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/literalInWhenSubject.kt"); } + @Test + @TestMetadata("longElvisChain.kt") + public void testLongElvisChain() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt"); + } + @Test @TestMetadata("multipleCasts.kt") public void testMultipleCasts() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 161e14b2c93..9d1e17933b6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -4015,6 +4015,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/literalInWhenSubject.kt"); } + @Test + @TestMetadata("longElvisChain.kt") + public void testLongElvisChain() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/smartcasts/longElvisChain.kt"); + } + @Test @TestMetadata("multipleCasts.kt") public void testMultipleCasts() throws Exception {