Skip to content

Commit aa931c4

Browse files
committed
Use putAttachment in exportForwarders to handle ambiguous overloads
exportForwarders can be called more than once for the same expression if there are ambiguous overloads. Closes #21071
1 parent 5e83606 commit aa931c4

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

compiler/src/dotty/tools/dotc/typer/Namer.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -1454,7 +1454,7 @@ class Namer { typer: Typer =>
14541454

14551455
addForwarders(selectors, Nil)
14561456
val forwarders = avoidClashes(buf.toList)
1457-
exp.pushAttachment(ExportForwarders, forwarders)
1457+
exp.putAttachment(ExportForwarders, forwarders)
14581458
forwarders
14591459
end exportForwarders
14601460

tests/neg/i21071.check

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
-- [E051] Reference Error: tests/neg/i21071.scala:9:2 ------------------------------------------------------------------
2+
9 | foo { // error
3+
| ^^^
4+
| Ambiguous overload. The overloaded alternatives of method foo in object MySuite with types
5+
| (a: String): Nothing
6+
| (a: List[String]): Nothing
7+
| both match arguments ((??? : => Nothing))
8+
|
9+
| longer explanation available when compiling with `-explain`

tests/neg/i21071.scala

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
trait Service {
2+
def method: String
3+
}
4+
5+
object MySuite {
6+
def foo(a: List[String]) = ???
7+
def foo(a: String) = ???
8+
9+
foo { // error
10+
11+
new Service {
12+
private val underlying: Service = ???
13+
private val s = "foo"
14+
15+
export underlying.*
16+
export s.toLowerCase
17+
}
18+
19+
???
20+
}
21+
}

0 commit comments

Comments
 (0)