From f765963056f2b9b4bf74e5b0a612b23b76091f21 Mon Sep 17 00:00:00 2001 From: pyos Date: Thu, 19 Mar 2020 11:27:07 +0100 Subject: [PATCH] Split JVM backend diagnostics test into IR and non-IR versions The IR backend no longer generates redundant INLINE_CALL_CYCLEs. --- .../testsWithJvmBackend/indirectInlineCycle.kt | 2 +- .../indirectInlineCycle_ir.diag.txt | 6 ++++++ .../indirectInlineCycle_ir.kt | 11 +++++++++++ .../indirectInlineCycle_ir.txt | 4 ++++ .../testsWithJvmBackend/inlineCycle.kt | 2 +- .../testsWithJvmBackend/inlineCycle_ir.diag.txt | 6 ++++++ .../testsWithJvmBackend/inlineCycle_ir.kt | 11 +++++++++++ .../testsWithJvmBackend/inlineCycle_ir.txt | 4 ++++ .../suspendInlineCycle_ir.diag.txt | 6 ++++++ .../suspendInlineCycle_ir.kt | 11 +++++++++++ .../suspendInlineCycle_ir.txt | 4 ++++ ...iagnosticsTestWithJvmIrBackendGenerated.java | 17 +++++++++++------ 12 files changed, 76 insertions(+), 8 deletions(-) create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.diag.txt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.kt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.txt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.diag.txt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.kt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.txt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.diag.txt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.kt create mode 100644 compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.txt diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle.kt b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle.kt index 6a33947f1f9..b8301ceb79f 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle.kt @@ -1,5 +1,5 @@ // !RENDER_DIAGNOSTICS_FULL_TEXT - +// TARGET_BACKEND: JVM_OLD inline fun inlineFun1(crossinline p: () -> Unit) { object { fun method() { inlineFun2(p) } diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.diag.txt b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.diag.txt new file mode 100644 index 00000000000..fe28b9dec90 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.diag.txt @@ -0,0 +1,6 @@ +/indirectInlineCycle_ir.kt:8:24: error: the 'inlineFun2' invocation is a part of inline cycle + fun method() { inlineFun2(p) } + ^ +/indirectInlineCycle_ir.kt:13:5: error: the 'inlineFun1' invocation is a part of inline cycle + inlineFun1(p) + ^ diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.kt new file mode 100644 index 00000000000..c88bfbd2e31 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.kt @@ -0,0 +1,11 @@ +// !RENDER_DIAGNOSTICS_FULL_TEXT +// TARGET_BACKEND: JVM_IR +inline fun inlineFun1(crossinline p: () -> Unit) { + object { + fun method() { inlineFun2(p) } + } +} + +inline fun inlineFun2(crossinline p: () -> Unit) { + inlineFun1(p) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.txt b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.txt new file mode 100644 index 00000000000..7ffee00a6e3 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.txt @@ -0,0 +1,4 @@ +package + +public inline fun inlineFun1(/*0*/ crossinline p: () -> kotlin.Unit): kotlin.Unit +public inline fun inlineFun2(/*0*/ crossinline p: () -> kotlin.Unit): kotlin.Unit diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle.kt b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle.kt index 00e19237fab..f3608f2c132 100644 --- a/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle.kt +++ b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle.kt @@ -1,5 +1,5 @@ // !RENDER_DIAGNOSTICS_FULL_TEXT - +// TARGET_BACKEND: JVM_OLD inline fun inlineFun1(p: () -> Unit) { p() inlineFun2(p) diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.diag.txt b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.diag.txt new file mode 100644 index 00000000000..8c763cd207d --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.diag.txt @@ -0,0 +1,6 @@ +/inlineCycle_ir.kt:8:5: error: the 'inlineFun2' invocation is a part of inline cycle + inlineFun2(p) + ^ +/inlineCycle_ir.kt:13:5: error: the 'inlineFun1' invocation is a part of inline cycle + inlineFun1(p) + ^ diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.kt new file mode 100644 index 00000000000..073f73911ec --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.kt @@ -0,0 +1,11 @@ +// !RENDER_DIAGNOSTICS_FULL_TEXT +// TARGET_BACKEND: JVM_IR +inline fun inlineFun1(p: () -> Unit) { + p() + inlineFun2(p) +} + +inline fun inlineFun2(p: () -> Unit) { + p() + inlineFun1(p) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.txt b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.txt new file mode 100644 index 00000000000..66a2506dc5e --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.txt @@ -0,0 +1,4 @@ +package + +public inline fun inlineFun1(/*0*/ p: () -> kotlin.Unit): kotlin.Unit +public inline fun inlineFun2(/*0*/ p: () -> kotlin.Unit): kotlin.Unit diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.diag.txt b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.diag.txt new file mode 100644 index 00000000000..aca5206c7fb --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.diag.txt @@ -0,0 +1,6 @@ +/suspendInlineCycle_ir.kt:8:5: error: the 'inlineFun2' invocation is a part of inline cycle + inlineFun2(p) + ^ +/suspendInlineCycle_ir.kt:13:5: error: the 'inlineFun1' invocation is a part of inline cycle + inlineFun1(p) + ^ diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.kt b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.kt new file mode 100644 index 00000000000..f70e37d5fcb --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.kt @@ -0,0 +1,11 @@ +// !RENDER_DIAGNOSTICS_FULL_TEXT +// TARGET_BACKEND: JVM_IR +suspend inline fun inlineFun1(p: () -> Unit) { + p() + inlineFun2(p) +} + +suspend inline fun inlineFun2(p: () -> Unit) { + p() + inlineFun1(p) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.txt b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.txt new file mode 100644 index 00000000000..bc22b1eda1a --- /dev/null +++ b/compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.txt @@ -0,0 +1,4 @@ +package + +public suspend inline fun inlineFun1(/*0*/ p: () -> kotlin.Unit): kotlin.Unit +public suspend inline fun inlineFun2(/*0*/ p: () -> kotlin.Unit): kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java index f4fd5284928..cdd1e2f3124 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithJvmIrBackendGenerated.java @@ -29,14 +29,19 @@ public class DiagnosticsTestWithJvmIrBackendGenerated extends AbstractDiagnostic KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithJvmBackend"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); } - @TestMetadata("indirectInlineCycle.kt") - public void testIndirectInlineCycle() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle.kt"); + @TestMetadata("indirectInlineCycle_ir.kt") + public void testIndirectInlineCycle_ir() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/indirectInlineCycle_ir.kt"); } - @TestMetadata("inlineCycle.kt") - public void testInlineCycle() throws Exception { - runTest("compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle.kt"); + @TestMetadata("inlineCycle_ir.kt") + public void testInlineCycle_ir() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/inlineCycle_ir.kt"); + } + + @TestMetadata("suspendInlineCycle_ir.kt") + public void testSuspendInlineCycle_ir() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJvmBackend/suspendInlineCycle_ir.kt"); } @TestMetadata("compiler/testData/diagnostics/testsWithJvmBackend/duplicateJvmSignature")