summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Phillips <paulp@improving.org>2009-05-04 21:28:24 +0000
committerPaul Phillips <paulp@improving.org>2009-05-04 21:28:24 +0000
commitf5508bac2c012b9a43468c863c2d7186e78ef079 (patch)
tree0865d295b3af98c473a7a6164dfd83edde250af4
parent036b3851c1598fa78f5fa4c4bd671f02cc291f0b (diff)
downloadscala-f5508bac2c012b9a43468c863c2d7186e78ef079.tar.gz
scala-f5508bac2c012b9a43468c863c2d7186e78ef079.tar.bz2
scala-f5508bac2c012b9a43468c863c2d7186e78ef079.zip
Fix and test case for #1286.
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala9
-rw-r--r--test/files/neg/bug1286.check2
-rw-r--r--test/files/neg/bug1286/a.scala3
-rw-r--r--test/files/neg/bug1286/b.scala3
4 files changed, 17 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
index 106b737672..6cae7d5835 100644
--- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala
+++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala
@@ -1045,6 +1045,15 @@ trait Symbols {
(that.sourceFile eq null) ||
(this.sourceFile eq that.sourceFile) ||
(this.sourceFile == that.sourceFile)
+
+ // recognize companion object in separate file and fail, else compilation
+ // appears to succeed but highly opaque errors come later: see bug #1286
+ if (res == false) {
+ val (f1, f2) = (this.sourceFile, that.sourceFile)
+ if (f1 != null && f2 != null && f1 != f2)
+ throw FatalError("Companions '" + this + "' and '" + that + "' must be defined in same file.")
+ }
+
res
}
diff --git a/test/files/neg/bug1286.check b/test/files/neg/bug1286.check
new file mode 100644
index 0000000000..9bf63252cc
--- /dev/null
+++ b/test/files/neg/bug1286.check
@@ -0,0 +1,2 @@
+error: fatal error: Companions 'object Foo' and 'trait Foo' must be defined in same file.
+one error found
diff --git a/test/files/neg/bug1286/a.scala b/test/files/neg/bug1286/a.scala
new file mode 100644
index 0000000000..0300ce793c
--- /dev/null
+++ b/test/files/neg/bug1286/a.scala
@@ -0,0 +1,3 @@
+trait Foo {
+ def jump = Foo.x
+} \ No newline at end of file
diff --git a/test/files/neg/bug1286/b.scala b/test/files/neg/bug1286/b.scala
new file mode 100644
index 0000000000..0df474461e
--- /dev/null
+++ b/test/files/neg/bug1286/b.scala
@@ -0,0 +1,3 @@
+object Foo extends Foo {
+ val x = "x"
+} \ No newline at end of file