summaryrefslogtreecommitdiff
path: root/test/files/run/t8029.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-12-04 17:45:10 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-12-06 14:30:56 +0100
commitfdcc262070470e0968afcdf0036cc18781c52e33 (patch)
tree26c07bf7bc97dc2a3f37c9180cca50d455362508 /test/files/run/t8029.scala
parent7c1d1149291e1b83c96a0f6954144b9e97c030ea (diff)
downloadscala-fdcc262070470e0968afcdf0036cc18781c52e33.tar.gz
scala-fdcc262070470e0968afcdf0036cc18781c52e33.tar.bz2
scala-fdcc262070470e0968afcdf0036cc18781c52e33.zip
SI-8029 Avoid multi-run cyclic error with companions, package object
The bug report suggests this problem only became visible in the IDE *after* 2.10.3, but I tested an IDE with exactly 2.10.3 and saw the same problem. In fact, my test case fails as far back as 2.10.0. I suspect the problem showed up after 816cecf9a9, which checks that pairs of companion symbols are codefined eagerly in Namers. This commit modifies the check of `rawInfo ne NoType` in `isCoDefinedWith` to avoid triggering adaptation of types from the previous run. I'm not sure of the precise intent of that check. I looked at c9861cd198 (genesis of isCoDefinedWith). Before that we get back to 3761cb4b3a1 (the dawn of Subversion.)
Diffstat (limited to 'test/files/run/t8029.scala')
-rw-r--r--test/files/run/t8029.scala57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/files/run/t8029.scala b/test/files/run/t8029.scala
new file mode 100644
index 0000000000..dbd5c41387
--- /dev/null
+++ b/test/files/run/t8029.scala
@@ -0,0 +1,57 @@
+import scala.tools.partest._
+import scala.tools.nsc._
+
+object Test extends DirectTest {
+
+ override def extraSettings: String = "-usejavacp -nowarn -Ystop-after:typer"
+
+ override def code = "" // not used
+
+ def code1 = """
+package object p1 {
+ trait A
+ object A
+}
+ """
+
+ def code2 = """
+package object p2 {
+ class A
+ object A
+}
+ """
+
+ def code3 = """
+package object p3 {
+ object A
+ trait A
+}
+ """
+
+ def code4 = """
+package object p4 {
+ object A
+ trait A
+}
+ """
+
+ def show() {
+ val global = newCompiler()
+ import global._
+ def typecheck(code: String): Unit = {
+ val r = new Run
+ val sourceFile = newSources(code).head
+ global.reporter.reset()
+ r.compileSources(sourceFile :: Nil)
+ assert(!global.reporter.hasErrors)
+ }
+
+ def typecheckTwice(code: String): Unit = {
+ typecheck(code)
+ typecheck(code)
+ }
+
+ // was: illegal cyclic reference involving package ...
+ Seq(code1, code2, code3, code4) foreach typecheckTwice
+ }
+}