diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt index 83b69406654..1d7995965cb 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.kt @@ -238,7 +238,14 @@ object KotlinToJVMBytecodeCompiler { val scriptConstructor = getScriptConstructor(scriptClass) try { - scriptConstructor.newInstance(*arrayOf(scriptArgs.toTypedArray())) + try { + scriptConstructor.newInstance(*arrayOf(scriptArgs.toTypedArray())) + } + finally { + // NB: these lines are required (see KT-9546) but aren't covered by tests + System.out.flush() + System.err.flush() + } } catch (e: Throwable) { reportExceptionFromScript(e) diff --git a/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.expected b/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.expected new file mode 100644 index 00000000000..f8d1988005e --- /dev/null +++ b/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.expected @@ -0,0 +1,4 @@ +OUT: +AB +C +Return code: 0 diff --git a/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.kts b/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.kts new file mode 100644 index 00000000000..93c9f68c118 --- /dev/null +++ b/compiler/testData/integration/smoke/scriptFlushBeforeShutdown/script.kts @@ -0,0 +1,3 @@ +print("A") +println("B") +print("C") diff --git a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java index bfe1533e4ab..c59a2dbf926 100644 --- a/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java +++ b/compiler/tests/org/jetbrains/kotlin/integration/CompilerSmokeTest.java @@ -65,6 +65,10 @@ public class CompilerSmokeTest extends CompilerSmokeTestBase { runCompiler("script", "-script", "script.kts"); } + public void testScriptFlushBeforeShutdown() throws Exception { + runCompiler("script", "-script", "script.kts"); + } + public void testCompileScript() throws Exception { String jar = tmpdir.getAbsolutePath() + File.separator + "script.jar";