Skip to content

Commit 5d7d7e8

Browse files
authored
Merge pull request #10109 from lrytz/unlink-release-target
[nomerge] on 2.12, -release should not set -target
2 parents 6850170 + 9648941 commit 5d7d7e8

3 files changed

Lines changed: 17 additions & 17 deletions

File tree

src/compiler/scala/tools/nsc/Global.scala

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1369,16 +1369,6 @@ class Global(var currentSettings: Settings, reporter0: Reporter)
13691369
settings.userSetSettings filter (_.isDeprecated) foreach { s =>
13701370
runReporting.deprecationWarning(NoPosition, s.name + " is deprecated: " + s.deprecationMessage.get, "", "", "")
13711371
}
1372-
if (!StandardScalaSettings.SupportedTargetVersions.contains(settings.target.value)) {
1373-
runReporting.deprecationWarning(
1374-
NoPosition,
1375-
settings.target.name + ":" + settings.target.value + " is deprecated and has no effect, setting to " + StandardScalaSettings.DefaultTargetVersion,
1376-
since = "2.12.16",
1377-
site = "",
1378-
origin = ""
1379-
)
1380-
settings.target.value = StandardScalaSettings.DefaultTargetVersion
1381-
}
13821372
settings.conflictWarning.foreach(runReporting.warning(NoPosition, _, WarningCategory.Other, site = ""))
13831373
}
13841374

src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
package scala.tools.nsc
1414
package settings
1515

16-
import scala.tools.nsc.settings.StandardScalaSettings.{AllTargetVersions, DefaultTargetVersion, SupportedTargetVersions}
16+
import scala.tools.nsc.settings.StandardScalaSettings._
1717
import scala.tools.util.PathResolver.Defaults
1818
import scala.util.Properties.{isJavaAtLeast, javaSpecVersion}
1919

@@ -71,15 +71,17 @@ trait StandardScalaSettings { _: MutableSettings =>
7171
if (releaseValue.map(_.toInt < setting.value.toInt).getOrElse(false))
7272
errorFn("-release cannot be less than -target")
7373
if (!setting.deprecationMessage.isDefined)
74-
if (SupportedTargetVersions.contains(setting.value))
75-
setting.withDeprecationMessage("Use -release instead to compile against the correct platform API.")
76-
else {
74+
if (setting.value.toInt > MaxSupportedTargetVersion) {
75+
setting.withDeprecationMessage(s"Scala 2.12 cannot emit valid class files for targets newer than $MaxSupportedTargetVersion (this is possible with Scala 2.13). Use -release to compile against a specific platform API version.")
76+
setting.value = DefaultTargetVersion
77+
} else if (setting.value.toInt < MinSupportedTargetVersion) {
7778
setting.withDeprecationMessage(s"${setting.name}:${setting.value} is deprecated, forcing use of $DefaultTargetVersion")
78-
setting.value = DefaultTargetVersion // triggers this hook
79+
setting.value = DefaultTargetVersion
7980
}
8081
}
8182
.withAbbreviation("--target")
82-
def targetValue: String = releaseValue.getOrElse(target.value)
83+
// Unlike 2.13, don't use `releaseValue.getOrElse(target.value)`, because 2.12 doesn't have a fix for scala-dev#408
84+
def targetValue: String = target.value
8385
val unchecked = BooleanSetting ("-unchecked", "Enable additional warnings where generated code depends on assumptions. See also -Wconf.") withAbbreviation "--unchecked" withPostSetHook { s =>
8486
if (s.value) Wconf.tryToSet(List(s"cat=unchecked:w"))
8587
else Wconf.tryToSet(List(s"cat=unchecked:s"))
@@ -115,9 +117,9 @@ object StandardScalaSettings {
115117
case SpecificScalaVersion(major, _, _, _) => major
116118
case _ => 19
117119
}
120+
val MaxSupportedTargetVersion = 8
118121
val DefaultTargetVersion = "8"
119122

120123
private val AllTargetVersions = (MinTargetVersion to MaxTargetVersion).map(_.toString).toList
121-
val SupportedTargetVersions: List[String] = (MinSupportedTargetVersion to MaxTargetVersion).map(_.toString).toList
122124
val AllPermissibleTargetValues: List[String] = AllTargetVersions.flatMap(v => v :: s"jvm-1.$v" :: s"jvm-$v" :: s"1.$v" :: Nil)
123125
}

test/files/run/t12543-target.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// javaVersion: 11+
2+
// scalac: -release:11
3+
4+
trait T { val x = 42 }
5+
class C extends T
6+
object Test {
7+
def main(args: Array[String]): Unit = { new C(); () }
8+
}

0 commit comments

Comments
 (0)