From 75ad20f8232d91ec6ed23cd9cfeb8b6d065e87e1 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 11 Oct 2017 14:46:15 +0300 Subject: [PATCH] Build compiler, plugin & stdlib with constructor call normalization Required as a workaround for Proguard bug https://sourceforge.net/p/proguard/bugs/664/ When processing bytecode generated by Kotlin compiler for constructor call with stack spilling during arguments evaluation, ProGuard performs an equivalent transformation for the bytecode, but emits invalid stack frame information. In JVM 1.6, such invalid stack frames are ignored and re-evaluated by JVM during bytecode verification. In JVM 1.8, such invalid stack frames cause VerifyError. --- build.gradle.kts | 2 +- libraries/kotlin.test/jvm/build.gradle | 3 ++- libraries/stdlib/build.gradle | 1 + libraries/stdlib/jre7/build.gradle | 1 + libraries/stdlib/jre8/build.gradle | 2 +- libraries/tools/binary-compatibility-validator/build.gradle | 2 +- libraries/tools/kotlin-annotations-jvm/build.gradle | 1 + libraries/tools/kotlin-reflect/build.gradle | 1 + libraries/tools/kotlin-stdlib-gen/build.gradle | 2 +- libraries/tools/runtime/build.gradle | 1 + libraries/tools/script-runtime/build.gradle | 1 + 11 files changed, 12 insertions(+), 5 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0a6594d1254..b7f9f50ab97 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -240,7 +240,7 @@ allprojects { kotlinOptions { languageVersion = kotlinLanguageVersion apiVersion = kotlinLanguageVersion - freeCompilerArgs = listOf("-Xallow-kotlin-package") + freeCompilerArgs = listOf("-Xallow-kotlin-package", "-Xnormalize-constructor-calls=enable") } } diff --git a/libraries/kotlin.test/jvm/build.gradle b/libraries/kotlin.test/jvm/build.gradle index cdbab85b2d0..6a6f979c3a9 100644 --- a/libraries/kotlin.test/jvm/build.gradle +++ b/libraries/kotlin.test/jvm/build.gradle @@ -30,7 +30,8 @@ dist { compileKotlin { // TODO: Why "-Xmulti-platfrom" ? - kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xmulti-platform", "-module-name", project.archivesBaseName] + kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xnormalize-constructor-calls=enable", + "-Xmulti-platform", "-module-name", project.archivesBaseName] } compileTestKotlin { diff --git a/libraries/stdlib/build.gradle b/libraries/stdlib/build.gradle index 9bceeb3eb17..5f063b5c754 100644 --- a/libraries/stdlib/build.gradle +++ b/libraries/stdlib/build.gradle @@ -133,6 +133,7 @@ compileKotlin { "-version", "-Xallow-kotlin-package", "-Xmultifile-parts-inherit", + "-Xnormalize-constructor-calls=enable", "-Xdump-declarations-to", "${buildDir}/stdlib-declarations.json", "-module-name", project.name ] diff --git a/libraries/stdlib/jre7/build.gradle b/libraries/stdlib/jre7/build.gradle index c984aeb53cf..d2c9d5a2d70 100644 --- a/libraries/stdlib/jre7/build.gradle +++ b/libraries/stdlib/jre7/build.gradle @@ -49,6 +49,7 @@ compileKotlin { kotlinOptions.freeCompilerArgs = [ "-Xallow-kotlin-package", "-Xmultifile-parts-inherit", + "-Xnormalize-constructor-calls=enable", "-Xdump-declarations-to", "${buildDir}/stdlib-jre7-declarations.json", "-module-name", project.name ] diff --git a/libraries/stdlib/jre8/build.gradle b/libraries/stdlib/jre8/build.gradle index b773d395819..bb674aeb0a4 100644 --- a/libraries/stdlib/jre8/build.gradle +++ b/libraries/stdlib/jre8/build.gradle @@ -58,7 +58,7 @@ compileKotlin { } compileTestKotlin { - kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package"] + kotlinOptions.freeCompilerArgs = ["-Xallow-kotlin-package", "-Xnormalize-constructor-calls=enable"] } kotlin.experimental.coroutines 'enable' diff --git a/libraries/tools/binary-compatibility-validator/build.gradle b/libraries/tools/binary-compatibility-validator/build.gradle index b988168375d..7b428b75a2e 100644 --- a/libraries/tools/binary-compatibility-validator/build.gradle +++ b/libraries/tools/binary-compatibility-validator/build.gradle @@ -33,7 +33,7 @@ def testCasesDeclarationsDump = "${buildDir}/cases-declarations.json".toString() compileTestKotlin { kotlinOptions { - freeCompilerArgs = ["-Xdump-declarations-to=$testCasesDeclarationsDump"] + freeCompilerArgs = ["-Xdump-declarations-to=$testCasesDeclarationsDump", "-Xnormalize-constructor-calls=enable"] } } diff --git a/libraries/tools/kotlin-annotations-jvm/build.gradle b/libraries/tools/kotlin-annotations-jvm/build.gradle index f9d929951bd..b1ff6bc64d9 100644 --- a/libraries/tools/kotlin-annotations-jvm/build.gradle +++ b/libraries/tools/kotlin-annotations-jvm/build.gradle @@ -30,6 +30,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) { compileKotlin { kotlinOptions.freeCompilerArgs = [ "-Xallow-kotlin-package", + "-Xnormalize-constructor-calls=enable", "-module-name", project.name ] } diff --git a/libraries/tools/kotlin-reflect/build.gradle b/libraries/tools/kotlin-reflect/build.gradle index 52eb68f2ca3..f429127aba2 100644 --- a/libraries/tools/kotlin-reflect/build.gradle +++ b/libraries/tools/kotlin-reflect/build.gradle @@ -72,6 +72,7 @@ compileKotlin { kotlinOptions { freeCompilerArgs = ["-version", "-Xallow-kotlin-package", + "-Xnormalize-constructor-calls=enable", "-module-name", "kotlin-reflection", "-Xdump-declarations-to", "${buildDir}/reflect-declarations.json"] } diff --git a/libraries/tools/kotlin-stdlib-gen/build.gradle b/libraries/tools/kotlin-stdlib-gen/build.gradle index af8b622a00f..d83a1a20da1 100644 --- a/libraries/tools/kotlin-stdlib-gen/build.gradle +++ b/libraries/tools/kotlin-stdlib-gen/build.gradle @@ -13,7 +13,7 @@ compileKotlin { kotlinOptions { languageVersion = "1.1" apiVersion = "1.1" - freeCompilerArgs = ["-version"] + freeCompilerArgs = ["-version", "-Xnormalize-constructor-calls=enable"] } } diff --git a/libraries/tools/runtime/build.gradle b/libraries/tools/runtime/build.gradle index f862774f799..c1527c2e9d8 100644 --- a/libraries/tools/runtime/build.gradle +++ b/libraries/tools/runtime/build.gradle @@ -45,6 +45,7 @@ compileKotlin { kotlinOptions { freeCompilerArgs = [ "-Xallow-kotlin-package", + "-Xnormalize-constructor-calls=enable", "-Xdump-declarations-to", "${buildDir}/runtime-declarations.json", "-cp", "${rootDir}/dist/builtins", "-module-name", project.name diff --git a/libraries/tools/script-runtime/build.gradle b/libraries/tools/script-runtime/build.gradle index 6d765e999c7..a6a32eddefd 100644 --- a/libraries/tools/script-runtime/build.gradle +++ b/libraries/tools/script-runtime/build.gradle @@ -38,6 +38,7 @@ dist { compileKotlin { kotlinOptions.freeCompilerArgs = [ "-Xallow-kotlin-package", + "-Xnormalize-constructor-calls=enable", "-module-name", project.name ] }