diff options
author | Paul Phillips <paulp@improving.org> | 2012-10-31 07:15:01 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-10-31 07:54:24 -0700 |
commit | 202a949afeb4877318432ffff8e3ffdc14df9615 (patch) | |
tree | 4021376fcbcfe5d8bc5066ec6d9039fdd2097f88 /test/files/neg | |
parent | b480d991072e6e68ed46574d87e4483da778ff0e (diff) | |
parent | 8aec78470637f42f50981f8034215a709602dbad (diff) | |
download | scala-202a949afeb4877318432ffff8e3ffdc14df9615.tar.gz scala-202a949afeb4877318432ffff8e3ffdc14df9615.tar.bz2 scala-202a949afeb4877318432ffff8e3ffdc14df9615.zip |
Merge branch 'merge-2.10.0-wip' into merge-2.10.x
* merge-2.10.0-wip:
Use Typed rather than .setType
Wider use and a new variant of typedPos.
SI-6575 Plug inference leak of AbstractPartialFun
Remove compiler phases that don't influence scaladoc generation.
Disabled generation of _1, _2, etc. methods.
SI-6526 Additional test case.
Fix SI-6552, regression with self types.
avoid single-art assert where harmful in duration-tck
Fix for SI-6537, inaccurate unchecked warning.
Crash on missing accessor (internal bug in the lazy vals implementation) instead of trying to recover from the bug
Incorporated changes suggested in code review
Added one more test for SI-6358
Closes SI-6358. Move accessor generation for lazy vals to typers.
SI-6526 Tail call elimination should descend deeper.
Remove unneeded calls to substring()
Changes Tree and Type members from vals to defs.
Scaladoc knows the package structure of the libraries, so don't include them in external documentation setting.
Fixes SI-6170: issue with dragging scaladoc splitter over central iframe
Added a Swing ColorChooser wrapper
Added a Swing PopupMenu wrapper
Conflicts:
src/compiler/scala/reflect/reify/phases/Reshape.scala
src/compiler/scala/tools/nsc/typechecker/Duplicators.scala
src/continuations/plugin/scala/tools/selectivecps/SelectiveCPSTransform.scala
src/reflect/scala/reflect/internal/Types.scala
test/files/neg/unchecked-knowable.check
Diffstat (limited to 'test/files/neg')
-rw-r--r-- | test/files/neg/t6526.check | 16 | ||||
-rw-r--r-- | test/files/neg/t6526.scala | 41 | ||||
-rw-r--r-- | test/files/neg/unchecked-knowable.check | 7 | ||||
-rw-r--r-- | test/files/neg/unchecked-knowable.scala | 4 |
4 files changed, 65 insertions, 3 deletions
diff --git a/test/files/neg/t6526.check b/test/files/neg/t6526.check new file mode 100644 index 0000000000..606c18c301 --- /dev/null +++ b/test/files/neg/t6526.check @@ -0,0 +1,16 @@ +t6526.scala:8: error: could not optimize @tailrec annotated method inner: it contains a recursive call not in tail position + @tailrec def inner(i: Int): Int = 1 + inner(i) + ^ +t6526.scala:14: error: could not optimize @tailrec annotated method inner: it contains a recursive call not in tail position + @tailrec def inner(i: Int): Int = 1 + inner(i) + ^ +t6526.scala:20: error: could not optimize @tailrec annotated method inner: it contains a recursive call not in tail position + @tailrec def inner(i: Int): Int = 1 + inner(i) + ^ +t6526.scala:30: error: could not optimize @tailrec annotated method inner: it contains a recursive call not in tail position + @tailrec def inner(i: Int): Int = 1 + inner(i) + ^ +t6526.scala:39: error: could not optimize @tailrec annotated method inner: it contains a recursive call not in tail position + def inner(i: Int): Int = 1 + inner(i) + ^ +5 errors found diff --git a/test/files/neg/t6526.scala b/test/files/neg/t6526.scala new file mode 100644 index 0000000000..0bc249aa98 --- /dev/null +++ b/test/files/neg/t6526.scala @@ -0,0 +1,41 @@ +import scala.annotation.tailrec + +class TailRec { + def bar(f: => Any) = "" + + // transform the qualifier of a Select + bar { + @tailrec def inner(i: Int): Int = 1 + inner(i) + inner(0) + }.length + + // transform the body of a function + () => { + @tailrec def inner(i: Int): Int = 1 + inner(i) + inner(0) + } + + // transform the qualifier of a Select + { + @tailrec def inner(i: Int): Int = 1 + inner(i) + inner(0) + "" + }.length + + // The receiver of a tail recursive call must itself be transformed + object X { + @tailrec // okay, all other annotated methods should fail. + def foo: Any = { + { + @tailrec def inner(i: Int): Int = 1 + inner(i) + inner(0) + this + }.foo + } + } + + Some(new AnyRef) map { phooie => + @tailrec + def inner(i: Int): Int = 1 + inner(i) + } getOrElse 42 +} diff --git a/test/files/neg/unchecked-knowable.check b/test/files/neg/unchecked-knowable.check index 28e2d67920..327a5f202d 100644 --- a/test/files/neg/unchecked-knowable.check +++ b/test/files/neg/unchecked-knowable.check @@ -1,6 +1,9 @@ -unchecked-knowable.scala:17: warning: fruitless type test: a value of type Bippy cannot also be a A1 +unchecked-knowable.scala:18: warning: fruitless type test: a value of type Bippy cannot also be a A1 /* warn */ (new Bippy).isInstanceOf[A1] ^ +unchecked-knowable.scala:19: warning: fruitless type test: a value of type Bippy cannot also be a B1 + /* warn */ (new Bippy).isInstanceOf[B1] + ^ error: No warnings can be incurred under -Xfatal-warnings. -one warning found +two warnings found one error found diff --git a/test/files/neg/unchecked-knowable.scala b/test/files/neg/unchecked-knowable.scala index 667b47f504..21624c4fb4 100644 --- a/test/files/neg/unchecked-knowable.scala +++ b/test/files/neg/unchecked-knowable.scala @@ -7,6 +7,7 @@ final class A4 extends A2 /** Unknowable */ sealed abstract class B1 sealed abstract class B2 extends B1 +sealed trait B2B extends B1 final class B3 extends B1 trait B4 extends B2 @@ -15,6 +16,7 @@ trait Dingus class A { /* warn */ (new Bippy).isInstanceOf[A1] - /* nowarn */ (new Bippy).isInstanceOf[B1] + /* warn */ (new Bippy).isInstanceOf[B1] + /* nowarn */ (null: Dingus).isInstanceOf[B1] /* nowarn */ ((new Bippy): Any).isInstanceOf[A1] } |