Compiler version
3.8.3 and latest nightly 3.8.5-RC1-bin-20260409-c23f234-NIGHTLY
Minimized code
//> using scala 3.8.3
//> using options -language:experimental.subCases
@main def test = {
val r1 = "^foo".r.unanchored
val r2 = "bar$".r.unanchored
"foo bar" match {
case s @ r1() if s match { case r2() => s }
case _ => "no"
}
}
Output
java.lang.RuntimeException: Invalid pattern in Match node: Match(Literal(Constant(foo bar)),List(CaseDef(UnApply(Select(TypeApply(Select(Ident(r2),asInstanceOf),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class matching)),class Regex)])),unapplySeq),List(),List()),EmptyTree,Literal(Constant(foo bar))))) at: <123..147>
at dotty.tools.backend.jvm.BCodeHelpers.abort(BCodeHelpers.scala:703)
at dotty.tools.backend.jvm.BCodeHelpers.abort$(BCodeHelpers.scala:48)
at dotty.tools.backend.jvm.CodeGen$Impl.abort(CodeGen.scala:34)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genMatchTo$$anonfun$3(BCodeBodyBuilder.scala:1068)
at scala.collection.immutable.List.foreach(List.scala:327)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genMatchTo(BCodeBodyBuilder.scala:1039)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:488)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:477)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genReturn(BCodeBodyBuilder.scala:673)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:355)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo(BCodeBodyBuilder.scala:1135)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:469)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoad(BCodeBodyBuilder.scala:321)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadIfTo(BCodeBodyBuilder.scala:259)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:347)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo(BCodeBodyBuilder.scala:1135)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:469)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoad(BCodeBodyBuilder.scala:321)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadIfTo(BCodeBodyBuilder.scala:259)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:347)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo(BCodeBodyBuilder.scala:1135)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:469)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoad(BCodeBodyBuilder.scala:321)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genStat(BCodeBodyBuilder.scala:135)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo$$anonfun$1(BCodeBodyBuilder.scala:1134)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:327)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo(BCodeBodyBuilder.scala:1134)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:469)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLabeledTo(BCodeBodyBuilder.scala:634)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:351)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlockTo(BCodeBodyBuilder.scala:1135)
at dotty.tools.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoadTo(BCodeBodyBuilder.scala:469)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.emitNormalMethodBody$1(BCodeSkelBuilder.scala:924)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genDefDef(BCodeSkelBuilder.scala:947)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:723)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen$$anonfun$1(BCodeSkelBuilder.scala:729)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:327)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:729)
at dotty.tools.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:289)
at dotty.tools.backend.jvm.CodeGen.genClass(CodeGen.scala:163)
at dotty.tools.backend.jvm.CodeGen.genClassDef$1(CodeGen.scala:65)
at dotty.tools.backend.jvm.CodeGen.genClassDefs$1(CodeGen.scala:120)
at dotty.tools.backend.jvm.CodeGen.genClassDefs$1$$anonfun$1(CodeGen.scala:118)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:327)
at dotty.tools.backend.jvm.CodeGen.genClassDefs$1(CodeGen.scala:118)
at dotty.tools.backend.jvm.CodeGen.genUnit(CodeGen.scala:123)
at dotty.tools.backend.jvm.GenBCode.run(GenBCode.scala:89)
at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:406)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.immutable.List.foreach(List.scala:327)
at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:399)
at dotty.tools.backend.jvm.GenBCode.runOn(GenBCode.scala:97)
at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:380)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
at scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1324)
at dotty.tools.dotc.Run.runPhases$1(Run.scala:373)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$2(Run.scala:420)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$adapted$1(Run.scala:420)
at scala.Function0.apply$mcV$sp(Function0.scala:42)
at dotty.tools.dotc.Run.showProgress(Run.scala:482)
at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:420)
at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:432)
at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
at dotty.tools.dotc.Run.compileUnits(Run.scala:432)
at dotty.tools.dotc.Run.compileUnits(Run.scala:325)
at dotty.tools.repl.ReplCompiler.compile(ReplCompiler.scala:92)
at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:381)
at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:343)
at dotty.tools.repl.ReplDriver.$anonfun$4(ReplDriver.scala:252)
at dotty.tools.repl.JLineTerminal.withMonitoringCtrlC(JLineTerminal.scala:125)
at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:253)
at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:259)
at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:293)
at dotty.tools.repl.ReplDriver.runBody$$anonfun$1(ReplDriver.scala:267)
at dotty.tools.repl.ScalaClassLoader$.asContext(ScalaClassLoader.scala:32)
at dotty.tools.repl.ReplDriver.runBody(ReplDriver.scala:267)
at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:259)
at dotty.tools.repl.ReplDriver.tryRunning(ReplDriver.scala:166)
at dotty.tools.repl.Main$.main(Main.scala:8)
at dotty.tools.repl.Main.main(Main.scala)
Invalid pattern in Match node: Match(Literal(Constant(foo bar)),List(CaseDef(UnApply(Select(TypeApply(Select(Ident(r2),asInstanceOf),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class matching)),class Regex)])),unapplySeq),List(),List()),EmptyTree,Literal(Constant(foo bar))))) at: <123..147>
-- Error: ----------------------------------------------------------------------
4 |@main def test = {
|^
|Error while emitting rs$line$2
|Invalid pattern in Match node: Match(Literal(Constant(foo bar)),List(CaseDef(UnApply(Select(TypeApply(Select(Ident(r2),asInstanceOf),List(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class matching)),class Regex)])),unapplySeq),List(),List()),EmptyTree,Literal(Constant(foo bar))))) at: <123..147>
|
5 | val r1 = "^foo".r.unanchored
6 |...
11 |}
Expectation
The code should compile without any error
Compiler version
3.8.3 and latest nightly 3.8.5-RC1-bin-20260409-c23f234-NIGHTLY
Minimized code
Output
Expectation
The code should compile without any error