Skip to content

Attempt to commit TS[extra, ...] into already committed TS[...] #15714

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
coreywoodfield opened this issue Jul 20, 2022 · 4 comments
Closed

Attempt to commit TS[extra, ...] into already committed TS[...] #15714

coreywoodfield opened this issue Jul 20, 2022 · 4 comments
Labels
itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label

Comments

@coreywoodfield
Copy link

Compiler version

3.0.2

Minimized code

import scala.compiletime.constValueTuple
import scala.deriving.Mirror

class Foo[A](name: String)

class Test {
  private type FieldType[Label, Labels <: Tuple, Types <: Tuple] = (Labels, Types) match {
    case (Label *: _, tpe *: _)         => tpe
    case (label *: labels, tpe *: tpes) => FieldType[Label, labels, tpes]
    case EmptyTuple                     => Nothing
  }

  def requiredToReproduceError[A](using m: Mirror.ProductOf[A])(
    foos: Tuple.Map[m.MirroredElemTypes, [A] =>> Foo[A]],
  ) = {}

  inline def test[A](using m: Mirror.ProductOf[A]) = {
    requiredToReproduceError(
      constValueTuple[m.MirroredElemLabels]
        .map[[T] =>> Foo[FieldType[T, m.MirroredElemLabels, m.MirroredElemTypes]]] {
          [T] => (name: T) => Foo[FieldType[T, m.MirroredElemLabels, m.MirroredElemTypes]](name.asInstanceOf[String])
        }
        .asInstanceOf[Tuple.Map[m.MirroredElemTypes, [A] =>> Foo[A]]],
    )
  }
}

Output (click arrow to expand)

java.lang.AssertionError: assertion failed: Attempt to commit TS[2064276X, 2064247X, 2064176, 2064175, 2064174] into already committed TS[2064247X, 2064176, 2064175, 2064174]
	at scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:8)
	at dotty.tools.dotc.core.TyperState.commit(TyperState.scala:153)
	at dotty.tools.dotc.typer.Inferencing$.isFullyDefined(Inferencing.scala:40)
	at dotty.tools.dotc.core.TypeOps$.simplify(TypeOps.scala:143)
	at dotty.tools.dotc.core.TypeOps$SimplifyMap.apply(TypeOps.scala:183)
	at dotty.tools.dotc.core.Types$TypeMap.mapOver$$anonfun$1(Types.scala:5445)
	at dotty.tools.dotc.core.Types$LazyRef.ref(Types.scala:2865)
	at dotty.tools.dotc.core.Types$TypeMap.mapOver$$anonfun$1(Types.scala:5444)
	at dotty.tools.dotc.core.Types$LazyRef.ref(Types.scala:2865)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5903)
	at dotty.tools.dotc.core.Types$TypeTraverser.traverseChildren(Types.scala:5920)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:469)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy23$1(Types.scala:5833)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5833)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5837)
	at dotty.tools.dotc.core.Types$TypeTraverser.traverseChildren(Types.scala:5920)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:469)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeAccumulator.op$proxy23$1(Types.scala:5833)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldArgs$1(Types.scala:5833)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5837)
	at dotty.tools.dotc.core.Types$TypeTraverser.traverseChildren(Types.scala:5920)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:469)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5847)
	at dotty.tools.dotc.core.Types$TypeTraverser.traverseChildren(Types.scala:5920)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:469)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeTraverser.apply(Types.scala:5919)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5912)
	at dotty.tools.dotc.core.Types$TypeAccumulator.foldOver(Types.scala:5876)
	at dotty.tools.dotc.core.Types$TypeTraverser.traverseChildren(Types.scala:5920)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:469)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector$TypeDependencyTraverser.traverse(ExtractDependencies.scala:460)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.addTypeDependency(ExtractDependencies.scala:478)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:387)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1533)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1512)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1514)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1531)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1545)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1539)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1600)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1512)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1514)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1607)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1604)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.apply(Trees.scala:1637)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.fold$1(Trees.scala:1512)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.apply(Trees.scala:1514)
	at dotty.tools.dotc.ast.Trees$Instance$TreeAccumulator.foldOver(Trees.scala:1613)
	at dotty.tools.dotc.ast.Trees$Instance$TreeTraverser.traverseChildren(Trees.scala:1638)
	at dotty.tools.dotc.sbt.ExtractDependenciesCollector.traverse(ExtractDependencies.scala:406)
	at dotty.tools.dotc.sbt.ExtractDependencies.run(ExtractDependencies.scala:69)
	at dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:303)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:304)
	at dotty.tools.dotc.Run.runPhases$4$$anonfun$4(Run.scala:205)
	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:1328)
	at dotty.tools.dotc.Run.runPhases$5(Run.scala:216)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:224)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:67)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:231)
	at dotty.tools.dotc.Run.compileSources(Run.scala:166)
	at dotty.tools.dotc.Run.compile(Run.scala:150)
	at dotty.tools.dotc.Driver.doCompile(Driver.scala:39)
	at dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:88)
	at dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
	at sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:192)
	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.scala:18)
	at sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:247)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:182)
	at sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
	at sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
	at sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
	at sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:210)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:528)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:528)
	at sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:175)
	at sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:173)
	at sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:459)
	at sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
	at sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
	at sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
	at sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
	at sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:414)
	at sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:501)
	at sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:401)
	at sbt.internal.inc.Incremental$.apply(Incremental.scala:167)
	at sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:528)
	at sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:482)
	at sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
	at sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:420)
	at sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
	at higherkindness.rules_scala.workers.zinc.compile.ZincRunner$.work(ZincRunner.scala:247)
	at higherkindness.rules_scala.workers.zinc.compile.ZincRunner$.work(ZincRunner.scala:47)
	at higherkindness.rules_scala.common.worker.WorkerMain.$anonfun$main$1(WorkerMain.scala:86)
	at scala.runtime.java8.JFunction0$mcI$sp.apply(JFunction0$mcI$sp.scala:17)
	at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:678)
	at scala.concurrent.impl.Promise$Transformation.run(Promise.scala:467)
	... 5 more
@coreywoodfield coreywoodfield added itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label labels Jul 20, 2022
@som-snytt
Copy link
Contributor

som-snytt commented Jul 21, 2022

Requires -Yforce-sbt-phases using scalac as shown at #14907 (but that particular manifestation was fixed on 3.2.0). Or earlier, #13101 fixed on 3.1.0.

(sbt is visible in the stack trace shown.)

Does not reproduce with scalac 3.1.0. Does repro at 3.0.2.

I wonder if the issue template should ask to specify sbt or other repro method?

@odersky
Copy link
Contributor

odersky commented Jul 21, 2022

I can't reproduce this on main even with -Yforce-sbt-phases.

@som-snytt
Copy link
Contributor

I wasn't clear: no repro on 3.2 either. No repro since 3.0.x.

@odersky
Copy link
Contributor

odersky commented Jul 21, 2022

OK, we can close then

@odersky odersky closed this as completed Jul 21, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
itype:bug itype:crash stat:needs triage Every issue needs to have an "area" and "itype" label
Projects
None yet
Development

No branches or pull requests

3 participants