scala3 icon indicating copy to clipboard operation
scala3 copied to clipboard

Wrong unreachable code reported for inline def pattern match

Open enif-lee opened this issue 9 months ago • 2 comments

Compiler version

3.3.3

Minimized code

sealed trait NodeId
case object Hi extends NodeId
case object Hello extends NodeId

extension(value: NodeId)
  inline def parse[T <: NodeId] = value match
    case t: T => print("match")
    case _ => print("not match")


@main
def main(): Unit = {
  Hi.parse[Hello.type]
}

Output

not match
[IJ]compile
[info] compiling 2 Scala sources to /Users/js_lee/git/personal/scala3-test/target/scala-3.3.3/classes ...
[warn] -- [E121] Pattern Match Warning: /Users/js_lee/git/personal/scala3-test/src/main/scala/main.scala:12:9 
[warn] 12 |    case _ => print("not match")
[warn]    |         ^
[warn]    |Unreachable case except for null (if this is intentional, consider writing case null => instead).
[warn] -- [E030] Match case Unreachable Warning: /Users/js_lee/git/personal/scala3-test/src/main/scala/main.scala:17:10 
[warn] 17 |  Hi.parse[Hello.type]
[warn]    |  ^^^^^^^^^^^^^^^^^^^^
[warn]    |  Unreachable case
[warn]    |----------------------------------------------------------------------------
[warn]    |Inline stack trace
[warn]    |- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
[warn]    |This location contains code that was inlined from main.scala:11
[warn] 11 |    case t: T => print("match")
[warn]    |         ^^^^
[warn]     ----------------------------------------------------------------------------
[warn] two warnings found

![image](https://github.com/scala/scala3/assets/9916002/dba8e346-3f3b-4a39-a1dd-c1472683407

Expectation

The case _ is reachable case but The compiler doesn't think so

enif-lee avatar May 13 '24 14:05 enif-lee