Skip to content

Typer regression introduced in #15746 #15934

Closed
@WojciechMazur

Description

@WojciechMazur

1st out of 2 regressions found when testing #15746 in Open Community Build.
Regression found in akka/akka sources

Compiler version

3.2.1-nightly

Minimized code

trait ReplicatedData
trait ActorRef[-T] {
  def tell(msg: T): Unit = ???
}

// shared in both domains
abstract class Key[+T <: ReplicatedData]

// domain 1
object dd {
  sealed abstract class GetResponse[A <: ReplicatedData] {
    def key: Key[A]
  }
  case class GetSuccess[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
  case class GetFailure[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
}

// domain 2
object JReplicator {
  final case class Get[A <: ReplicatedData](
      key: Key[A],
      replyTo: ActorRef[GetResponse[A]]
  )
  sealed abstract class GetResponse[A <: ReplicatedData] {
    def key: Key[A]
  }
  case class GetSuccess[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
  case class GetFailure[A <: ReplicatedData](key: Key[A]) extends GetResponse[A]
}

val _ = null.asInstanceOf[Any] match {
  case cmd: JReplicator.Get[d] =>
    val reply =
      util
        .Try[dd.GetResponse[d]](???)
        .map {
          // Needs at least 2 cases to triger failure
          case rsp: dd.GetSuccess[d]  => JReplicator.GetSuccess(rsp.key)
          case rsp: dd.GetResponse[d] => JReplicator.GetFailure(rsp.key)
        }
        // needs recover to trigger failure
        .recover { case _ => new JReplicator.GetFailure(cmd.key) }
    reply.foreach { cmd.replyTo tell _ } // error
}

Output

[error] ./test.scala:44:38: 
[error] Found:    JReplicator.GetResponse[?1.CAP]
[error] Required: JReplicator.GetResponse[d]
[error] 
[error] where:    ?1 is an unknown value of type scala.runtime.TypeBox[d, ReplicatedData]
[error]           d  is a type locally defined in package object test$package with bounds <: ReplicatedData
[error]     reply.foreach { cmd.replyTo tell _ }
[error]     

Expectation

Should compile

Metadata

Metadata

Assignees

No one assigned

    Labels

    itype:bugregressionThis worked in a previous version but doesn't anymorestat:needs triageEvery issue needs to have an "area" and "itype" label

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions