Prohibit using old JVM backend with LV >= 1.6

#KT-48928 Fixed
This commit is contained in:
Alexander Udalov
2021-09-28 22:13:33 +02:00
parent e933c7b6d9
commit aa247726b6
10 changed files with 55 additions and 3 deletions
@@ -531,9 +531,9 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
}
fun toLanguageVersionSettings(collector: MessageCollector): LanguageVersionSettings {
// If only "-api-version" is specified, language version is assumed to be the latest stable
val languageVersion = parseVersion(collector, languageVersion, "language") ?: LanguageVersion.LATEST_STABLE
val languageVersion = parseVersion(collector, languageVersion, "language")
?: defaultLanguageVersion(collector)
// If only "-language-version" is specified, API version is assumed to be equal to the language version
// (API version cannot be greater than the language version)
@@ -554,6 +554,8 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
checkProgressiveMode(languageVersion, collector)
}
checkPlatformSpecificSettings(languageVersionSettings, collector)
return languageVersionSettings
}
@@ -622,6 +624,12 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
}
}
protected open fun defaultLanguageVersion(collector: MessageCollector): LanguageVersion =
LanguageVersion.LATEST_STABLE
protected open fun checkPlatformSpecificSettings(languageVersionSettings: LanguageVersionSettings, collector: MessageCollector) {
}
private enum class VersionKind(val text: String) {
LANGUAGE("Language"), API("API")
}
@@ -534,4 +534,26 @@ default: `indy-with-constants` for JVM target 9 or greater, `inline` otherwise""
}
return result
}
override fun defaultLanguageVersion(collector: MessageCollector): LanguageVersion =
if (useOldBackend) {
if (!suppressVersionWarnings) {
collector.report(
CompilerMessageSeverity.STRONG_WARNING,
"Language version is automatically inferred to ${LanguageVersion.KOTLIN_1_5.versionString} when using " +
"the old JVM backend. Consider specifying -language-version explicitly, or remove -Xuse-old-backend"
)
}
LanguageVersion.KOTLIN_1_5
} else super.defaultLanguageVersion(collector)
override fun checkPlatformSpecificSettings(languageVersionSettings: LanguageVersionSettings, collector: MessageCollector) {
if (useOldBackend && languageVersionSettings.languageVersion >= LanguageVersion.KOTLIN_1_6) {
collector.report(
CompilerMessageSeverity.ERROR,
"Old JVM backend does not support language version 1.6 or above. " +
"Please use language version 1.5 or below, or remove -Xuse-old-backend"
)
}
}
}
@@ -1,3 +1,4 @@
warning: language version is automatically inferred to 1.5 when using the old JVM backend. Consider specifying -language-version explicitly, or remove -Xuse-old-backend
warning: -Xuse-old-backend is deprecated and will be removed in a future release
error: -Xabi-stability=unstable is not supported in the old JVM backend
COMPILATION_ERROR
+2
View File
@@ -3,3 +3,5 @@ $TESTDATA_DIR$/simple.kt
$TEMP_DIR$
-Xuse-ir
-Xuse-old-backend
-language-version
1.5
+2
View File
@@ -2,3 +2,5 @@ $TESTDATA_DIR$/classAndTraitClash.kt
-d
$TEMP_DIR$
-Xuse-old-backend
-language-version
1.5
+6
View File
@@ -0,0 +1,6 @@
$TESTDATA_DIR$/simple.kt
-d
$TEMP_DIR$
-Xuse-old-backend
-language-version
1.6
+2
View File
@@ -0,0 +1,2 @@
error: old JVM backend does not support language version 1.6 or above. Please use language version 1.5 or below, or remove -Xuse-old-backend
COMPILATION_ERROR
@@ -2,3 +2,5 @@ $TESTDATA_DIR$/suspendInFunInterfaceIrDisabled.kt
-d
$TEMP_DIR$
-Xuse-old-backend
-language-version
1.5
@@ -736,6 +736,11 @@ public class CliTestGenerated extends AbstractCliTest {
runTest("compiler/testData/cli/jvm/nullabilityAnnotations.args");
}
@TestMetadata("oldBackendLv16.args")
public void testOldBackendLv16() throws Exception {
runTest("compiler/testData/cli/jvm/oldBackendLv16.args");
}
@TestMetadata("pluginSimple.args")
public void testPluginSimple() throws Exception {
runTest("compiler/testData/cli/jvm/pluginSimple.args");
@@ -1 +1,3 @@
// LANGUAGE_VERSION: 1.6
// LANGUAGE_VERSION: 1.6
// IGNORE_BACKEND_LEGACY: JVM
// IGNORE_BACKEND: JVM