Skip to content

Commit dbcd689

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 dbcd689

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

Diff for: compiler/src/dotty/tools/dotc/typer/Namer.scala

+5-4
Original file line numberDiff line numberDiff line change
@@ -1452,10 +1452,11 @@ class Namer { typer: Typer =>
14521452
forwarders.derivedCons(forwarder2, avoidClashes(forwarders2))
14531453
case Nil => forwarders
14541454

1455-
addForwarders(selectors, Nil)
1456-
val forwarders = avoidClashes(buf.toList)
1457-
exp.pushAttachment(ExportForwarders, forwarders)
1458-
forwarders
1455+
exp.getAttachment(ExportForwarders).getOrElse:
1456+
addForwarders(selectors, Nil)
1457+
val forwarders = avoidClashes(buf.toList)
1458+
exp.pushAttachment(ExportForwarders, forwarders)
1459+
forwarders
14591460
end exportForwarders
14601461

14611462
/** Add forwarders as required by the export statements in this class */

Diff for: 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`

Diff for: 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)