summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Contexts.scala2
-rw-r--r--src/reflect/scala/reflect/internal/Symbols.scala12
-rw-r--r--test/files/neg/t8024.check6
-rw-r--r--test/files/neg/t8024.scala14
-rw-r--r--test/files/neg/t8024b.check6
-rw-r--r--test/files/neg/t8024b.scala17
6 files changed, 52 insertions, 5 deletions
diff --git a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
index 2b4417a80d..53bc9a2772 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Contexts.scala
@@ -1126,7 +1126,7 @@ trait Contexts { self: Analyzer =>
impSym = NoSymbol
// Otherwise they are irreconcilably ambiguous
else
- return ambiguousDefnAndImport(defSym.owner, imp1)
+ return ambiguousDefnAndImport(defSym.alternatives.head.owner, imp1)
}
// At this point only one or the other of defSym and impSym might be set.
diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala
index 52d035eadb..0dfcf06874 100644
--- a/src/reflect/scala/reflect/internal/Symbols.scala
+++ b/src/reflect/scala/reflect/internal/Symbols.scala
@@ -2482,10 +2482,14 @@ trait Symbols extends api.Symbols { self: SymbolTable =>
/** String representation, including symbol's kind e.g., "class Foo", "method Bar".
* If hasMeaninglessName is true, uses the owner's name to disambiguate identity.
*/
- override def toString: String = compose(
- kindString,
- if (hasMeaninglessName) owner.decodedName + idString else nameString
- )
+ override def toString: String = {
+ if (isPackageObjectOrClass && !settings.debug)
+ s"package object ${owner.decodedName}"
+ else compose(
+ kindString,
+ if (hasMeaninglessName) owner.decodedName + idString else nameString
+ )
+ }
/** String representation of location.
*/
diff --git a/test/files/neg/t8024.check b/test/files/neg/t8024.check
new file mode 100644
index 0000000000..bd551aa591
--- /dev/null
+++ b/test/files/neg/t8024.check
@@ -0,0 +1,6 @@
+t8024.scala:13: error: reference to sqrt is ambiguous;
+it is both defined in package object p and imported subsequently by
+import java.lang.Math.sqrt
+ sqrt(0d)
+ ^
+one error found
diff --git a/test/files/neg/t8024.scala b/test/files/neg/t8024.scala
new file mode 100644
index 0000000000..b4c2c5ebb9
--- /dev/null
+++ b/test/files/neg/t8024.scala
@@ -0,0 +1,14 @@
+package p
+
+trait NRoot[A]
+
+object `package` {
+ final def sqrt(x: Double): Double = Math.sqrt(x)
+ final def sqrt[A](a: A)(implicit ev: NRoot[A]): A = ???
+}
+
+object FastComplex {
+ import java.lang.Math.sqrt
+
+ sqrt(0d)
+}
diff --git a/test/files/neg/t8024b.check b/test/files/neg/t8024b.check
new file mode 100644
index 0000000000..9cd89bca53
--- /dev/null
+++ b/test/files/neg/t8024b.check
@@ -0,0 +1,6 @@
+t8024b.scala:15: error: reference to sqrt is ambiguous;
+it is both defined in object FastComplex and imported subsequently by
+import java.lang.Math.sqrt
+ sqrt(0d)
+ ^
+one error found
diff --git a/test/files/neg/t8024b.scala b/test/files/neg/t8024b.scala
new file mode 100644
index 0000000000..cf3d496365
--- /dev/null
+++ b/test/files/neg/t8024b.scala
@@ -0,0 +1,17 @@
+package p
+
+trait NRoot[A]
+
+object FastComplex {
+ final def sqrt(x: Double): Double = Math.sqrt(x)
+ final def sqrt[A](a: A)(implicit ev: NRoot[A]): A = ???
+
+ object Inner {
+ import java.lang.Math.sqrt
+
+ // wrong message:
+ // error: reference to sqrt is ambiguous;
+ // it is both defined in object FastComplex and imported subsequently by
+ sqrt(0d)
+ }
+}