summaryrefslogtreecommitdiff
path: root/test/files/pos/t6891.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-01-09 14:53:08 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-01-26 14:49:04 +0100
commit7babdab9ace07884ce844af923c93e0dcd49f7ea (patch)
tree4c02c41d5551de0104a7b055509b8e4d8979b594 /test/files/pos/t6891.scala
parentcff09340327ddcfd3d39aca69dfb719e7a501b5f (diff)
downloadscala-7babdab9ace07884ce844af923c93e0dcd49f7ea.tar.gz
scala-7babdab9ace07884ce844af923c93e0dcd49f7ea.tar.bz2
scala-7babdab9ace07884ce844af923c93e0dcd49f7ea.zip
SI-6891 Fix value class + tailrec crasher.
rhs.substituteSymbols(old, new) leaves us with: def loop#12225(x#12226: A#15491): scala#21.this.Unit#1615 = loop#12225(x#12226) In which the TermSymbol x#12226 has a stale info, pointing at the A#7274, the class type parameter, rather than A#15491, the corresponding type parameter of the synthetic backing method. I've improved `TreeSymSubstituter` to substitute not only `Tree#{tpe, symbol}`, but also `DefTree#sym.info`. The `pos` test that triggered the new code path are listed here: https://gist.github.com/4575687 AFAICS, no special treatment of Function, Return, or Import is needed in TreeSymSubstutor.
Diffstat (limited to 'test/files/pos/t6891.scala')
-rw-r--r--test/files/pos/t6891.scala26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/files/pos/t6891.scala b/test/files/pos/t6891.scala
new file mode 100644
index 0000000000..bed2d0d777
--- /dev/null
+++ b/test/files/pos/t6891.scala
@@ -0,0 +1,26 @@
+object O {
+ implicit class Foo[A](val value: String) extends AnyVal {
+ def bippy() = {
+ @annotation.tailrec def loop(x: A): Unit = loop(x)
+ ()
+ }
+
+ def boppy() = {
+ @annotation.tailrec def loop(x: value.type): Unit = loop(x)
+ ()
+ }
+
+ def beppy[C](c: => C) = {
+ () => c
+ @annotation.tailrec def loop(x: value.type): Unit = loop(x)
+ () => c
+ ()
+ }
+ }
+ // uncaught exception during compilation: Types$TypeError("type mismatch;
+ // found : A(in method bippy$extension)
+ // required: A(in class Foo)") @ scala.tools.nsc.typechecker.Contexts$Context.issueCommon(Contexts.scala:396)
+ // error: scala.reflect.internal.Types$TypeError: type mismatch;
+ // found : A(in method bippy$extension)
+ // required: A(in class Foo)
+}