Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix exception on sequence matching with drop (#21281)
When using scalac with the flag Ysafe-init-global to compile the following example, I get the following exception. This PR fixes it and adds a test case to catch things like this in the future. Note, I made this pull request in collaboration with Ondrej Lhotak, Enze Xing, Fengyun Liu and David Hua) The example ```Scala object Matcher { val vararg_arr = Array(0, 1, 2, 3) val vararg_lst = List(vararg_arr*) val vararg_splice = vararg_lst match case List(0, 1, xs*) => 1 // binds xs to Seq(2, 3) case List(1, _*) => 0 // wildcard pattern case _ => 2 println(vararg_splice) } ``` The exception ``` Exception in thread "main" java.lang.AssertionError: NoDenotation.owner at dotty.tools.dotc.core.SymDenotations$NoDenotation$.owner(SymDenotations.scala:2623) at dotty.tools.dotc.transform.init.Objects.call(Objects.scala:660) at dotty.tools.dotc.transform.init.Objects.evalSeqPatterns$1(Objects.scala:1494) at dotty.tools.dotc.transform.init.Objects.evalPattern$1(Objects.scala:1406) at dotty.tools.dotc.transform.init.Objects.evalCase$1(Objects.scala:1336) at dotty.tools.dotc.transform.init.Objects.patternMatch$$anonfun$1(Objects.scala:1505) at scala.collection.immutable.List.map(List.scala:247) at dotty.tools.dotc.transform.init.Objects.patternMatch(Objects.scala:1505) at dotty.tools.dotc.transform.init.Objects.cases(Objects.scala:1255) at dotty.tools.dotc.transform.init.Objects.eval$$anonfun$1(Objects.scala:1095) at dotty.tools.dotc.transform.init.Objects$Cache$Data.$anonfun$5(Objects.scala:539) at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112) at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:538) at dotty.tools.dotc.transform.init.Objects.eval(Objects.scala:1095) at dotty.tools.dotc.transform.init.Objects.init$$anonfun$4(Objects.scala:1708) at scala.collection.immutable.List.foreach(List.scala:334) at dotty.tools.dotc.transform.init.Objects.init(Objects.scala:1705) at dotty.tools.dotc.transform.init.Objects$State$.iterate$1(Objects.scala:278) at dotty.tools.dotc.transform.init.Objects$State$.doCheckObject(Objects.scala:293) at dotty.tools.dotc.transform.init.Objects$State$.checkObjectAccess(Objects.scala:320) at dotty.tools.dotc.transform.init.Objects.accessObject(Objects.scala:1059) at dotty.tools.dotc.transform.init.Objects.checkClasses$$anonfun$2(Objects.scala:1072) at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:619) at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:617) at scala.collection.AbstractIterable.foreach(Iterable.scala:935) at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:905) at dotty.tools.dotc.transform.init.Objects.checkClasses(Objects.scala:1070) at dotty.tools.dotc.transform.init.Checker.runOn$$anonfun$1(Checker.scala:58) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15) at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10) at dotty.tools.dotc.core.Phases$Phase.cancellable(Phases.scala:521) at dotty.tools.dotc.transform.init.Checker.runOn(Checker.scala:59) at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:343) 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:1323) at dotty.tools.dotc.Run.runPhases$1(Run.scala:336) at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:384) at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:396) at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69) at dotty.tools.dotc.Run.compileUnits(Run.scala:396) at dotty.tools.dotc.Run.compileSources(Run.scala:282) at dotty.tools.dotc.Run.compile(Run.scala:267) at dotty.tools.dotc.Driver.doCompile(Driver.scala:37) at dotty.tools.dotc.Driver.process(Driver.scala:201) at dotty.tools.dotc.Driver.process(Driver.scala:169) at dotty.tools.dotc.Driver.process(Driver.scala:181) at dotty.tools.dotc.Driver.main(Driver.scala:211) at dotty.tools.dotc.Main.main(Main.scala) exception occurred while compiling List(../test-case.scala) An unhandled exception was thrown in the compiler. Please file a crash report here: https://github.com/scala/scala3/issues/new/choose For non-enriched exceptions, compile with -Xno-enrich-error-messages. while compiling: <no file> during phase: parser mode: Mode(ImplicitsEnabled,ReadPositions) library version: version 2.13.14 compiler version: version 3.6.0-RC1-bin-SNAPSHOT-nonbootstrapped-git-3dfd762 settings: -Ysafe-init-global true -classpath /home/kavin/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.14/scala-library-2.13.14.jar:/home/kavin/Documents/4A/URA2/scala3/library/../out/bootstrap/scala3-library-bootstrapped/scala-3.6.0-RC1-bin-SNAPSHOT-nonbootstrapped/scala3-library_3-3.6.0-RC1-bin-SNAPSHOT.jar -d /home/kavin/Documents/4A/URA2/scala3/compiler/../out/default-last-scalac-out.jar [error] Nonzero exit code returned from runner: 1 [error] (scala3-compiler / Compile / runMain) Nonzero exit code returned from runner: 1 [error] Total time: 17 s, completed Jul 26, 2024, 6:35:43 PM ``` [Cherry-picked 8064536]
- Loading branch information