Skip to content

3.7 regression: unhandled exception while running MegaPhase - map extension for (Int, Int) #22727

Closed
@OndrejSpanel

Description

@OndrejSpanel

Compiler version

3.7.0-RC1-bin-20250228-e592b37-NIGHTLY

The same code works fine in 3.6.3 or 3.6.4-RC2.

Minimized code

object Main {
  type IXY = (Int, Int)

  extension (xy: IXY) {
    def map(f: Int => Int): (Int, Int) = (f(xy._1), f(xy._2))
  }

  def main(args: Array[String]): Unit = {
    val a = (0, 1)
    println(a)
  }
}

Output (click arrow to expand)

scala: 
  unhandled exception while running MegaPhase{crossVersionChecks, firstTransform, checkReentrant, elimPackagePrefixes, cookComments, checkLoopingImplicits, betaReduce, inlineVals, expandSAMs, elimRepeated, refchecks, dropForMap} on C:\Dev\Sandbox\src\main\scala\Main.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: C:\Dev\Sandbox\src\main\scala\Main.scala
        during phase: MegaPhase{crossVersionChecks, firstTransform, checkReentrant, elimPackagePrefixes, cookComments, checkLoopingImplicits, betaReduce, inlineVals, expandSAMs, elimRepeated, refchecks, dropForMap}
                mode: Mode(ImplicitsEnabled)
     library version: version 2.13.16
    compiler version: version 3.7.0-RC1-bin-20250228-e592b37-NIGHTLY-git-e592b37
     while compiling: C:\Dev\Sandbox\src\main\scala\Main.scala
        during phase: MegaPhase{crossVersionChecks, firstTransform, checkReentrant, elimPackagePrefixes, cookComments, checkLoopingImplicits, betaReduce, inlineVals, expandSAMs, elimRepeated, refchecks, dropForMap}
                mode: Mode(ImplicitsEnabled)
     library version: version 2.13.16
    compiler version: version 3.7.0-RC1-bin-20250228-e592b37-NIGHTLY-git-e592b37
            settings: -Werror true -Wunused List(imports) -classpath C:\Dev\Sandbox\target\scala-3.7.0-RC1-bin-20250228-e592b37-NIGHTLY\classes;C:\Users\Ondra\AppData\Local\Coursier\Cache\v1\https\repo1.maven.org\maven2\org\scala-lang\scala3-library_3\3.7.0-RC1-bin-20250228-e592b37-NIGHTLY\scala3-library_3-3.7.0-RC1-bin-20250228-e592b37-NIGHTLY.jar;C:\Users\Ondra\AppData\Local\Coursier\Cache\v1\https\repo1.maven.org\maven2\org\scala-lang\scala-library\2.13.16\scala-library-2.13.16.jar -d C:\Dev\Sandbox\target\scala-3.7.0-RC1-bin-20250228-e592b37-NIGHTLY\classes

[error] ## Exception when compiling 1 sources to C:\Dev\Sandbox\target\scala-3.7.0-RC1-bin-20250228-e592b37-NIGHTLY\classes
[error] java.lang.AssertionError: assertion failed: TypeAlias(AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Tuple2),List(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))))
[error] scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
[error] dotty.tools.dotc.core.Types$TypeBounds.<init>(Types.scala:5555)
[error] dotty.tools.dotc.core.Types$RealTypeBounds.<init>(Types.scala:5631)
[error] dotty.tools.dotc.core.Types$TypeBounds$.apply(Types.scala:5672)
[error] dotty.tools.dotc.core.Types$ApproximatingTypeMap.rangeToBounds(Types.scala:6376)
[error] dotty.tools.dotc.core.Types$ApproximatingTypeMap.derivedAppliedType$$anonfun$2(Types.scala:6516)
[error] scala.collection.immutable.List.map(List.scala:247)
[error] dotty.tools.dotc.core.Types$ApproximatingTypeMap.derivedAppliedType(Types.scala:6516)
[error] dotty.tools.dotc.core.Types$TypeMap.mapOver(Types.scala:6203)
[error] dotty.tools.dotc.core.TypeOps$AsSeenFromMap.apply(TypeOps.scala:111)
[error] dotty.tools.dotc.core.Types$TypeMap.mapOverLambda(Types.scala:6160)
[error] dotty.tools.dotc.core.TypeOps$AsSeenFromMap.apply(TypeOps.scala:105)
[error] dotty.tools.dotc.core.Types$TypeMap.mapOverLambda(Types.scala:6160)
[error] dotty.tools.dotc.core.TypeOps$AsSeenFromMap.apply(TypeOps.scala:105)
[error] dotty.tools.dotc.core.TypeOps$.asSeenFrom(TypeOps.scala:55)
[error] dotty.tools.dotc.core.Types$Type.asSeenFrom(Types.scala:1113)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.derived$1(Denotations.scala:1107)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.computeAsSeenFrom(Denotations.scala:1134)
[error] dotty.tools.dotc.core.Denotations$SingleDenotation.computeAsSeenFrom(Denotations.scala:1087)
[error] dotty.tools.dotc.core.Denotations$PreDenotation.asSeenFrom(Denotations.scala:137)
[error] dotty.tools.dotc.core.SymDenotations$ClassDenotation.findMember(SymDenotations.scala:2195)
[error] dotty.tools.dotc.core.Types$Type.go$1(Types.scala:778)
[error] dotty.tools.dotc.core.Types$Type.findMember(Types.scala:959)
[error] dotty.tools.dotc.core.Types$Type.memberBasedOnFlags(Types.scala:751)
[error] dotty.tools.dotc.core.Types$Type.nonPrivateMember(Types.scala:741)
[error] dotty.tools.dotc.typer.RefChecks$.hidden$1(RefChecks.scala:1177)
[error] dotty.tools.dotc.typer.RefChecks$.checkExtensionMethods(RefChecks.scala:1203)
[error] dotty.tools.dotc.typer.RefChecks.transformDefDef(RefChecks.scala:1357)
[error] dotty.tools.dotc.typer.RefChecks.transformDefDef(RefChecks.scala:1352)
[error] dotty.tools.dotc.transform.MegaPhase.goDefDef(MegaPhase.scala:1041)
[error] dotty.tools.dotc.transform.MegaPhase.goDefDef(MegaPhase.scala:1042)
[error] dotty.tools.dotc.transform.MegaPhase.goDefDef(MegaPhase.scala:1042)
[error] dotty.tools.dotc.transform.MegaPhase.goDefDef(MegaPhase.scala:1042)
[error] dotty.tools.dotc.transform.MegaPhase.goDefDef(MegaPhase.scala:1042)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:268)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$1(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:376)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformNamed$1(MegaPhase.scala:272)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:452)
[error] dotty.tools.dotc.transform.MegaPhase.loop$1(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.transformStats(MegaPhase.scala:465)
[error] dotty.tools.dotc.transform.MegaPhase.mapPackage$1(MegaPhase.scala:396)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnnamed$1(MegaPhase.scala:399)
[error] dotty.tools.dotc.transform.MegaPhase.transformTree(MegaPhase.scala:454)
[error] dotty.tools.dotc.transform.MegaPhase.transformUnit(MegaPhase.scala:481)
[error] dotty.tools.dotc.transform.MegaPhase.run(MegaPhase.scala:493)
[error] dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:383)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.immutable.List.foreach(List.scala:334)
[error] dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:376)
[error] dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:346)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1324)
[error] dotty.tools.dotc.Run.runPhases$1(Run.scala:339)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$2(Run.scala:386)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$adapted$1(Run.scala:386)
[error] scala.Function0.apply$mcV$sp(Function0.scala:42)
[error] dotty.tools.dotc.Run.showProgress(Run.scala:448)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:386)
[error] dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:398)
[error] dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
[error] dotty.tools.dotc.Run.compileUnits(Run.scala:398)
[error] dotty.tools.dotc.Run.compileSources(Run.scala:285)
[error] dotty.tools.dotc.Run.compile(Run.scala:270)
[error] dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
[error] dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:141)
[error] dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:196)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:252)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:186)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:241)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:166)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:214)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3(Incremental.scala:178)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$3$adapted(Incremental.scala:176)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:454)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:117)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:265)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:409)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:496)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:396)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:204)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:542)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:496)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:433)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2419)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2369)
[error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:41)
[error] sbt.internal.io.Retry$.apply(Retry.scala:47)
[error] sbt.internal.io.Retry$.apply(Retry.scala:29)
[error] sbt.internal.io.Retry$.apply(Retry.scala:24)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:41)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2367)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:63)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:69)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:283)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:24)
[error] sbt.Execute.work(Execute.scala:292)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:283)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:265)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:65)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
[error] java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
[error] java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error] java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error] java.base/java.lang.Thread.run(Thread.java:834)
[error]
[error] stack trace is suppressed; run 'last Compile / compileIncremental' for the full output
[error] (Compile / compileIncremental) java.lang.AssertionError: assertion failed: TypeAlias(AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class scala)),class Tuple2),List(TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int), TypeRef(TermRef(ThisType(TypeRef(NoPrefix,module class <root>)),object scala),class Int))))
[error] Total time: 1 s, completed 5. 3. 2025 21:23:36

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions