diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-02-10 23:13:28 +0100 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-02-10 23:21:49 +0100 |
commit | 673cc83f198322b3346be2bddea7ff05bd6f0f5b (patch) | |
tree | 13bdc50189bc44d0548a01e9ba07a001dd74b45d /src/compiler/scala/tools/nsc/typechecker/Typers.scala | |
parent | 23b69c1e05474dc6b504d63c074629132264deaf (diff) | |
download | scala-673cc83f198322b3346be2bddea7ff05bd6f0f5b.tar.gz scala-673cc83f198322b3346be2bddea7ff05bd6f0f5b.tar.bz2 scala-673cc83f198322b3346be2bddea7ff05bd6f0f5b.zip |
SI-6514 Avoid spurious dead code warnings
`deadCode.expr` stores the method symbol most recently encountered
in `handleMonomorphicCall`, and uses this to avoid warnings
for arguments to label jumps and `Object#synchronized` (which
sneakily acts by-name without advertising the fact in its type.)
But this scheme was insufficient if the argument itself contains
another method call, such as `matchEnd(throw e(""))`.
This commit changes the single slot to a stack, and also
grants exemption to `LabelDef` trees. They were incorrectly
flagged in the enclosed test case after I made the the first change.
Diffstat (limited to 'src/compiler/scala/tools/nsc/typechecker/Typers.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/typechecker/Typers.scala | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Typers.scala b/src/compiler/scala/tools/nsc/typechecker/Typers.scala index dc5491a509..ce5d3cba7a 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Typers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Typers.scala @@ -3305,8 +3305,6 @@ trait Typers extends Modes with Adaptations with Tags { // but behaves as if it were (=> T) => T) we need to know what is the actual // target of a call. Since this information is no longer available from // typedArg, it is recorded here. - checkDead.updateExpr(fun) - val args1 = // no expected type when jumping to a match label -- anything goes (this is ok since we're typing the translation of well-typed code) // ... except during erasure: we must take the expected type into account as it drives the insertion of casts! @@ -3361,7 +3359,9 @@ trait Typers extends Modes with Adaptations with Tags { else constfold(treeCopy.Apply(tree, fun, args1) setType ifPatternSkipFormals(restpe)) } - handleMonomorphicCall + checkDead.updateExpr(fun) { + handleMonomorphicCall + } } else if (needsInstantiation(tparams, formals, args)) { //println("needs inst "+fun+" "+tparams+"/"+(tparams map (_.info))) inferExprInstance(fun, tparams) |