From a1acb4afaf6e91aec39986bf38ea0ede688af2cf Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Tue, 21 Jan 2020 17:41:44 +0100 Subject: [PATCH] Return correct PSI expression for EmptyLabeledReturn Fixes diagnostic reporting for appropriate constraint error #kt-32792 fixed --- .../fir/FirOldFrontendDiagnosticsTestGenerated.java | 5 +++++ .../kotlin/resolve/calls/tower/NewCallArguments.kt | 2 +- .../diagnostics/tests/regressions/kt32792.fir.kt | 10 ++++++++++ .../testData/diagnostics/tests/regressions/kt32792.kt | 10 ++++++++++ .../testData/diagnostics/tests/regressions/kt32792.txt | 4 ++++ .../kotlin/checkers/DiagnosticsTestGenerated.java | 5 +++++ .../javac/DiagnosticsUsingJavacTestGenerated.java | 5 +++++ 7 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/regressions/kt32792.fir.kt create mode 100644 compiler/testData/diagnostics/tests/regressions/kt32792.kt create mode 100644 compiler/testData/diagnostics/tests/regressions/kt32792.txt diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index ff323aca818..071b9951aaf 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -17781,6 +17781,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/regressions/kt32507.kt"); } + @TestMetadata("kt32792.kt") + public void testKt32792() throws Exception { + runTest("compiler/testData/diagnostics/tests/regressions/kt32792.kt"); + } + @TestMetadata("kt328.kt") public void testKt328() throws Exception { runTest("compiler/testData/diagnostics/tests/regressions/kt328.kt"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt index d07d240e131..8a5bfecd665 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewCallArguments.kt @@ -60,7 +60,7 @@ val KotlinCallArgument.psiExpression: KtExpression? return when (this) { is ReceiverExpressionKotlinCallArgument -> receiver.receiverValue.safeAs()?.expression is QualifierReceiverKotlinCallArgument -> receiver.safeAs()?.expression - is EmptyLabeledReturn -> null // questionable, maybe unit? + is EmptyLabeledReturn -> returnExpression else -> psiCallArgument.valueArgument.getArgumentExpression() } } diff --git a/compiler/testData/diagnostics/tests/regressions/kt32792.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt32792.fir.kt new file mode 100644 index 00000000000..a43473e753f --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt32792.fir.kt @@ -0,0 +1,10 @@ +// !LANGUAGE: +NewInference + +inline fun tryLambdas(lamb : () -> T) : T{ + return lamb.invoke() +} +fun main() { + tryLambdas { + return@tryLambdas + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/kt32792.kt b/compiler/testData/diagnostics/tests/regressions/kt32792.kt new file mode 100644 index 00000000000..a43473e753f --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt32792.kt @@ -0,0 +1,10 @@ +// !LANGUAGE: +NewInference + +inline fun tryLambdas(lamb : () -> T) : T{ + return lamb.invoke() +} +fun main() { + tryLambdas { + return@tryLambdas + } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/kt32792.txt b/compiler/testData/diagnostics/tests/regressions/kt32792.txt new file mode 100644 index 00000000000..266a2f40366 --- /dev/null +++ b/compiler/testData/diagnostics/tests/regressions/kt32792.txt @@ -0,0 +1,4 @@ +package + +public fun main(): kotlin.Unit +public inline fun tryLambdas(/*0*/ lamb: () -> T): T diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index e185e423abb..d3d4395b93e 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -17793,6 +17793,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/regressions/kt32507.kt"); } + @TestMetadata("kt32792.kt") + public void testKt32792() throws Exception { + runTest("compiler/testData/diagnostics/tests/regressions/kt32792.kt"); + } + @TestMetadata("kt328.kt") public void testKt328() throws Exception { runTest("compiler/testData/diagnostics/tests/regressions/kt328.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index f24d86f3444..aa544ca4c16 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -17783,6 +17783,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/regressions/kt32507.kt"); } + @TestMetadata("kt32792.kt") + public void testKt32792() throws Exception { + runTest("compiler/testData/diagnostics/tests/regressions/kt32792.kt"); + } + @TestMetadata("kt328.kt") public void testKt328() throws Exception { runTest("compiler/testData/diagnostics/tests/regressions/kt328.kt");