diff --git a/compiler/src/dotty/tools/dotc/transform/HoistSuperArgs.scala b/compiler/src/dotty/tools/dotc/transform/HoistSuperArgs.scala index 084b0793607d..ca584561b711 100644 --- a/compiler/src/dotty/tools/dotc/transform/HoistSuperArgs.scala +++ b/compiler/src/dotty/tools/dotc/transform/HoistSuperArgs.scala @@ -119,7 +119,8 @@ class HoistSuperArgs extends MiniPhase with IdentityDenotTransformer { thisPhase /** Only rewire types that are owned by the current Hoister and is an param or accessor */ def needsRewire(tp: Type) = tp match { case ntp: NamedType => - (ntp.symbol.owner == cls || ntp.symbol.owner == constr) && ntp.symbol.isParamOrAccessor + val owner = ntp.symbol.maybeOwner + (owner == cls || owner == constr) && ntp.symbol.isParamOrAccessor case _ => false } diff --git a/tests/pos/i11732.scala b/tests/pos/i11732.scala new file mode 100644 index 000000000000..a1138a94fcd7 --- /dev/null +++ b/tests/pos/i11732.scala @@ -0,0 +1,23 @@ +import scala.deriving._ + +trait TupleConversion[A, B] { + def to(a: A): B + def from(b: B): A +} + +object TupleConversion { + inline given autoTupleConversion[Prod <: Product](using m: Mirror.ProductOf[Prod]): TupleConversion[Prod, m.MirroredElemTypes] = + new TupleConversion[Prod, m.MirroredElemTypes] { + def to(a: Prod): m.MirroredElemTypes = Tuple.fromProductTyped(a) + def from(b: m.MirroredElemTypes): Prod = m.fromProduct(b) + } +} + +final case class Data(s0: Int, s1: Int) + +abstract class BaseSpec(f: () => Unit) + +object ProductBuilderTest + extends BaseSpec(() => { + val conv = implicitly[TupleConversion[Data, (Int, Int)]] + }) \ No newline at end of file