Skip to content

Commit 461258c

Browse files
authored
Merge pull request #11733 from dotty-staging/fix-11725
Survive competing methods with select names _1, _2, ...
2 parents 70af177 + 13d0056 commit 461258c

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

compiler/src/dotty/tools/dotc/transform/SyntheticMembers.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,8 @@ class SyntheticMembers(thisPhase: DenotTransformer) {
174174
def productElementBody(arity: Int, index: Tree)(using Context): Tree = {
175175
// case N => _${N + 1}
176176
val cases = 0.until(arity).map { i =>
177-
CaseDef(Literal(Constant(i)), EmptyTree, Select(This(clazz), nme.selectorName(i)))
177+
val sel = This(clazz).select(nme.selectorName(i), _.info.isParameterless)
178+
CaseDef(Literal(Constant(i)), EmptyTree, sel)
178179
}
179180

180181
Match(index, (cases :+ generateIOBECase(index)).toList)

tests/pos/i11725.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
sealed trait Expr[+A] extends ExprTuple[A]
2+
3+
case class Lit[A](value: A) extends Expr[A]
4+
5+
trait ExprTuple[+A] {
6+
def _1(implicit ev: ExprTuple.Has2[A]): Expr[ev._1] = ???
7+
def _2(implicit ev: ExprTuple.Has2[A]): Expr[ev._2] = ???
8+
}
9+
10+
object ExprTuple {
11+
trait Has2[-A] { type _1; type _2 }
12+
object Has2 {
13+
type Aux[-A, A1, A2] = Has2[A] { type _1 = A1; type _2 = A2 }
14+
}
15+
16+
implicit def tuple2[A, B]: Has2.Aux[(A, B), A, B] = ???
17+
}

0 commit comments

Comments
 (0)