diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-09-15 12:58:21 -0700 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2017-03-11 23:38:08 -0800 |
commit | bd280077d04a3ac84ca48f549faaa8915d46ef2e (patch) | |
tree | a7c8b244ef84b44df201c88b4233d17bcec306d1 /test | |
parent | 1b415c904bece230a706c0d19462345fc87abf67 (diff) | |
download | scala-bd280077d04a3ac84ca48f549faaa8915d46ef2e.tar.gz scala-bd280077d04a3ac84ca48f549faaa8915d46ef2e.tar.bz2 scala-bd280077d04a3ac84ca48f549faaa8915d46ef2e.zip |
SI-9158 No warn for comprehension patvars
Midstream assignments should not cause unused warnings.
Currently the encoding doesn't pass them along, but
passes the value from which they were destructured.
For for-comprehensions only, the patvar transform
tags the binds so that they are not warned if they
turn up in a valdef and are unused.
Extractors are invoked multiple times if the patvar is
used later, as noted on the ticket.
In a yield, the valdef is emitted only if the patvar
is referenced (possibly saving the extra extraction),
so there is no warning there currently.
Diffstat (limited to 'test')
-rw-r--r-- | test/files/neg/warn-unused-privates.check | 4 | ||||
-rw-r--r-- | test/files/neg/warn-unused-privates.scala | 21 |
2 files changed, 21 insertions, 4 deletions
diff --git a/test/files/neg/warn-unused-privates.check b/test/files/neg/warn-unused-privates.check index d273aa40f4..c77fcff420 100644 --- a/test/files/neg/warn-unused-privates.check +++ b/test/files/neg/warn-unused-privates.check @@ -71,13 +71,13 @@ warn-unused-privates.scala:153: warning: local val z in method f is never used val C(x, y, Some(z)) = c // warn ^ warn-unused-privates.scala:161: warning: local val z in method h is never used - val C(x @ _, y @ _, z @ Some(_)) = c // warn? + val C(x @ _, y @ _, z @ Some(_)) = c // warn for z? ^ warn-unused-privates.scala:166: warning: local val x in method v is never used val D(x) = d // warn ^ warn-unused-privates.scala:170: warning: local val x in method w is never used - val D(x @ _) = d // fixme + val D(x @ _) = d // warn, fixme (valdef pos is different) ^ warn-unused-privates.scala:97: warning: local var x in method f2 is never set - it could be a val var x = 100 // warn about it being a var diff --git a/test/files/neg/warn-unused-privates.scala b/test/files/neg/warn-unused-privates.scala index 1b702c7555..bc2799067e 100644 --- a/test/files/neg/warn-unused-privates.scala +++ b/test/files/neg/warn-unused-privates.scala @@ -158,7 +158,7 @@ trait Boundings { 17 } def h() = { - val C(x @ _, y @ _, z @ Some(_)) = c // warn? + val C(x @ _, y @ _, z @ Some(_)) = c // warn for z? 17 } @@ -167,8 +167,25 @@ trait Boundings { 17 } def w() = { - val D(x @ _) = d // fixme + val D(x @ _) = d // warn, fixme (valdef pos is different) 17 } } + +trait Forever { + def f = { + val t = Option((17, 42)) + for { + ns <- t + (i, j) = ns // no warn + } yield (i + j) + } + def g = { + val t = Option((17, 42)) + for { + ns <- t + (i, j) = ns // warn, fixme + } yield 42 // val emitted only if needed, hence nothing unused + } +} |