diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-08-10 09:29:58 +0200 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2013-08-13 10:15:27 -0700 |
commit | 5724cae9efe168094f5f3d176f2606b9c43de6dc (patch) | |
tree | 05717eab82226e070d16d3075e51345f643c49e2 /bincompat-forward.whitelist.conf | |
parent | e0d487d63144f2422d0be3bd8ac77e6f842e55ab (diff) | |
download | scala-5724cae9efe168094f5f3d176f2606b9c43de6dc.tar.gz scala-5724cae9efe168094f5f3d176f2606b9c43de6dc.tar.bz2 scala-5724cae9efe168094f5f3d176f2606b9c43de6dc.zip |
SI-7694 @uncheckedBounds, an opt-out from type bounds checking
Synthetic defs introduced by transforms like named/default arguments,
ANF (in scala-async) often introduce a type tree (the tpt of the temporary)
that are based on the types of expressions. These types are scrutinized in
RefChecks to check that type parameter bounds are satisfied.
However, the type of the expression might be based on slack a LUB that
fails to capture constraints between type parameters.
This slackness is noted in `mergePrefixAndArgs`:
// Martin: I removed this, because incomplete. Not sure there is a
// good way to fix it. For the moment we just err on the conservative
// side, i.e. with a bound that is too high.
The synthesizer can now opt out of bounds by annotating the type as follows:
val temp: (<expr.tpe> @uncheckedBounds) = expr
This facility is now used in named/default arguments for the temporaries
used for the reciever and arguments.
The annotation is hidden under scala.reflect.internal, rather than in
the more prominent scala.annotation.unchecked, to reflect the intention
that it should only be used in tree transformers.
The library component of this change and test case will be included in the
next commit. Why split like this? It shows that the 2.10.3 compiler will
work with 2.10.2 scala-reflect.jar.
Diffstat (limited to 'bincompat-forward.whitelist.conf')
-rw-r--r-- | bincompat-forward.whitelist.conf | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/bincompat-forward.whitelist.conf b/bincompat-forward.whitelist.conf index c6b7b38e8d..c92538b35a 100644 --- a/bincompat-forward.whitelist.conf +++ b/bincompat-forward.whitelist.conf @@ -531,6 +531,22 @@ filter { { matchName="scala.reflect.runtime.SymbolLoaders.isInvalidClassName" problemName=MissingMethodProblem + }, + { + matchName="scala.reflect.internal.SymbolTable.uncheckedBounds" + problemName=MissingMethodProblem + }, + { + matchName="scala.reflect.internal.Types.uncheckedBounds" + problemName=MissingMethodProblem + }, + { + matchName="scala.reflect.internal.Definitions#DefinitionsClass.UncheckedBoundsClass" + problemName=MissingMethodProblem + }, + { + matchName="scala.reflect.internal.annotations.uncheckedBounds" + problemName=MissingClassProblem } ] } |