Prohibit using old JVM backend with LV >= 1.6
#KT-48928 Fixed
This commit is contained in:
+10
-2
@@ -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")
|
||||
}
|
||||
|
||||
+22
@@ -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
|
||||
|
||||
@@ -3,3 +3,5 @@ $TESTDATA_DIR$/simple.kt
|
||||
$TEMP_DIR$
|
||||
-Xuse-ir
|
||||
-Xuse-old-backend
|
||||
-language-version
|
||||
1.5
|
||||
|
||||
@@ -2,3 +2,5 @@ $TESTDATA_DIR$/classAndTraitClash.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
-Xuse-old-backend
|
||||
-language-version
|
||||
1.5
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
$TESTDATA_DIR$/simple.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
-Xuse-old-backend
|
||||
-language-version
|
||||
1.6
|
||||
@@ -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");
|
||||
|
||||
+3
-1
@@ -1 +1,3 @@
|
||||
// LANGUAGE_VERSION: 1.6
|
||||
// LANGUAGE_VERSION: 1.6
|
||||
// IGNORE_BACKEND_LEGACY: JVM
|
||||
// IGNORE_BACKEND: JVM
|
||||
|
||||
Reference in New Issue
Block a user