Skip to content
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

Infinite recursion when matching a function in an enum case with the same name as a method of that enum #19641

Closed
kyouko-taiga opened this issue Feb 7, 2024 · 6 comments · Fixed by #19654
Assignees
Labels
area:transform itype:bug itype:crash regression This worked in a previous version but doesn't anymore
Milestone

Comments

@kyouko-taiga
Copy link
Collaborator

kyouko-taiga commented Feb 7, 2024

Compiler version

3.3.1

Minimized code

type DiagnosticConsturctor = (Int) => DiagnosticSet

final class Diagnostic

final class DiagnosticSet(elements: List[Diagnostic] = List())

enum Result:
  case Success extends Result
  case Failure(diagnose: DiagnosticConsturctor) extends Result
  def diagnose(n: Int): DiagnosticSet =
    this match
      case Success => DiagnosticSet()
      case Failure(d) => d(n)

@main def drive(): Unit =
  val r : Result = Result.Failure((n) => DiagnosticSet(List(Diagnostic())))
  r.diagnose(1)

Output

Stack overflow

Expectation

The program should run to completion.

My understanding of the issue is that the compiler resolves d to the method defined as member of Result rather than the case value of Failure. The stack trace is very confusing, though, as it reports a ping pong between the call in the match expression and the definition of the Failure case.

Note that a compile-time error is produced if the domain of diagnose is empty:

type DiagnosticConsturctor = () => DiagnosticSet

enum Result:
  case Success extends Result
  case Failure(diagnose: DiagnosticConsturctor) extends Result
  def diagnose(): DiagnosticSet = ???

In this case, the compiler complains that:

overriding method diagnose in class Result of type (): DiagnosticSet; value diagnose of type DiagnosticConsturctor needs override modifier

The reported issue can be fixed by renaming either the case value or the method.

Although this reproducer shows bad class design in Scala (buggy behavior aside), it is representative of a very reasonable setup for developers coming from Swift. Hence it might serve as a reference in the future to remember how Swift users can get intro trouble.

@kyouko-taiga kyouko-taiga added itype:bug stat:needs triage Every issue needs to have an "area" and "itype" label labels Feb 7, 2024
@bishabosha
Copy link
Member

bishabosha commented Feb 7, 2024

in 3.4.0-RC3 this actually causes a compiler crash with -Ysafe-init-global if you copy the code into the repl, press enter, then the second command calls drive() - so maybe we were on the way to catching this? @liufengyun

scala> drive()
Exception in thread "main" scala.MatchError: AnnotatedType(AppliedType(TypeRef(ThisType(TypeRef(NoPrefix,module class immutable)),class List),List(TypeRef(ThisType(TypeRef(ThisType(TypeRef(NoPrefix,module class <empty>)),module class rs$line$1$)),class Diagnostic))),ConcreteAnnotation(Apply(Select(New(TypeTree[TypeRef(ThisType(TypeRef(NoPrefix,module class unchecked)),class uncheckedVariance)]),<init>),List()))) (of class dotty.tools.dotc.core.Types$CachedAnnotatedType)
	at dotty.tools.dotc.transform.init.Util$Call$.unapply(Util.scala:44)
	at dotty.tools.dotc.transform.init.Util$NewExpr$.unapply(Util.scala:64)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1084)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.evalArgs$$anonfun$1(Objects.scala:1535)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.dotc.transform.init.Objects$.evalArgs(Objects.scala:1554)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1086)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1199)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1216)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs$$anonfun$1(Objects.scala:1062)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs(Objects.scala:1062)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1203)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs$$anonfun$1(Objects.scala:1062)
	at scala.collection.immutable.List.map(List.scala:250)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs(Objects.scala:1062)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1198)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1224)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$9$$anonfun$1(Objects.scala:681)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:126)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$9(Objects.scala:684)
	at dotty.tools.dotc.transform.init.Objects$.call(Objects.scala:677)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$23(Objects.scala:1127)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1127)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs$$anonfun$1(Objects.scala:1062)
	at scala.collection.immutable.List.map(List.scala:246)
	at dotty.tools.dotc.transform.init.Objects$.evalExprs(Objects.scala:1062)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1198)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1199)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$9$$anonfun$1(Objects.scala:681)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:126)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$9(Objects.scala:684)
	at dotty.tools.dotc.transform.init.Objects$.call(Objects.scala:677)
	at dotty.tools.dotc.transform.init.Objects$.$anonfun$28(Objects.scala:1142)
	at dotty.tools.dotc.transform.init.Objects$.cases(Objects.scala:1142)
	at dotty.tools.dotc.transform.init.Objects$.eval$$anonfun$1(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.dotty$tools$dotc$transform$init$Objects$Cache$Data$$_$_$$anonfun$5(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Cache.cachedEval(Cache.scala:112)
	at dotty.tools.dotc.transform.init.Objects$Cache$Data.cachedEval(Objects.scala:519)
	at dotty.tools.dotc.transform.init.Objects$.eval(Objects.scala:1056)
	at dotty.tools.dotc.transform.init.Objects$.init$$anonfun$4(Objects.scala:1665)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.dotc.transform.init.Objects$.init(Objects.scala:1678)
	at dotty.tools.dotc.transform.init.Objects$State$.iterate$1(Objects.scala:260)
	at dotty.tools.dotc.transform.init.Objects$State$.doCheckObject(Objects.scala:275)
	at dotty.tools.dotc.transform.init.Objects$State$.checkObjectAccess(Objects.scala:302)
	at dotty.tools.dotc.transform.init.Objects$.accessObject(Objects.scala:1020)
	at dotty.tools.dotc.transform.init.Objects$.checkClasses$$anonfun$2(Objects.scala:1033)
	at scala.collection.IterableOnceOps.foreach(IterableOnce.scala:576)
	at scala.collection.IterableOnceOps.foreach$(IterableOnce.scala:574)
	at scala.collection.AbstractIterable.foreach(Iterable.scala:933)
	at scala.collection.IterableOps$WithFilter.foreach(Iterable.scala:903)
	at dotty.tools.dotc.transform.init.Objects$.checkClasses(Objects.scala:1033)
	at dotty.tools.dotc.transform.init.Checker.runOn$$anonfun$1(Checker.scala:53)
	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:495)
	at dotty.tools.dotc.transform.init.Checker.runOn(Checker.scala:54)
	at dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:315)
	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:337)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:348)
	at dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:357)
	at dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:71)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:357)
	at dotty.tools.dotc.Run.compileUnits(Run.scala:267)
	at dotty.tools.repl.ReplCompiler.compile(ReplCompiler.scala:88)
	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:309)
	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:271)
	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:170)
	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:173)
	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:212)
	at dotty.tools.repl.ReplDriver.runBody$$anonfun$1(ReplDriver.scala:186)
	at dotty.tools.runner.ScalaClassLoader$.asContext(ScalaClassLoader.scala:80)
	at dotty.tools.repl.ReplDriver.runBody(ReplDriver.scala:186)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:173)
	at dotty.tools.repl.ReplDriver.tryRunning(ReplDriver.scala:135)
	at dotty.tools.repl.Main$.main(Main.scala:7)
	at dotty.tools.repl.Main.main(Main.scala)

@Gedochao
Copy link

Gedochao commented Feb 8, 2024

Seems like a regression, this runs fine with 3.3.0, I can replicate the StackOverflow with 3.3.1 and above.

The actual output is as follows:

scala-cli run --server=false replication.scala -S 3.3.1
Exception in thread "main" java.lang.StackOverflowError
        at java.base/java.lang.invoke.DirectMethodHandle.allocateInstance(DirectMethodHandle.java:520)
        at Result$Failure._1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)
        at Result$Failure._1$$anonfun$adapted$1(replication.scala:9)
        at Result.diagnose(replication.scala:13)
        at Result$Failure._1$$anonfun$1(replication.scala:9)

(--server=false isn't actually necessary, getting the same output via Bloop)
Btw. this happens when the code is being run, the actual compilation goes through.

@Gedochao Gedochao added area:transform itype:crash regression This worked in a previous version but doesn't anymore and removed stat:needs triage Every issue needs to have an "area" and "itype" label labels Feb 8, 2024
@Gedochao
Copy link

Gedochao commented Feb 8, 2024

Assuming this is a regression, as it runs fine on 3.3.0.

scala-cli run replication.scala -S 3.3.0
# Compiling project (Scala 3.3.0, JVM (17))
# Compiled project (Scala 3.3.0, JVM (17))

I'm tagging it as a compiler crash as well, even though that seems to only be replicable in the REPL.

@odersky
Copy link
Contributor

odersky commented Feb 8, 2024

It's probably an issue in Namer. We generate a binding

def _1 = diagnose

in class Failure. That's an untyped tree. When type-checking that tree we somehow resolve to the diagnose method that was inherited from Result. We should resolve to the diagnose in Failure instead. I am not sure why that happens. The diagnose in failure should be known when we typecheck the _1 accessor and should take precedence over the inherited diagnose.

@odersky
Copy link
Contributor

odersky commented Feb 8, 2024

Can we get a bisect on this?

@odersky
Copy link
Contributor

odersky commented Feb 8, 2024

It might be this PR:

#18286

At least when I turn off

        val compat0 = pt.dealias match
          case defn.FunctionNOf(args, resType, _) =>
            narrowByTypes(alts, args, resType)
          case _ =>
            Nil
        if (compat0.isEmpty) then

in Applications.scala the code compiles correctly.

Changes in overloading resolution are very very sensitive, since any wrong measure leads to wrong runtime code, as in this case here. I do not know the history of this change, it seems it was introduced to fix another regression. Before patching this further it would be good to get a sense for why this code is here and what it does.

@nicolasstucki, @jchyb Can you provide some detail on this?

@odersky odersky self-assigned this Feb 9, 2024
odersky added a commit that referenced this issue Feb 12, 2024
…19654)

Fixes #19641 

How we got here:

Originally, overloading resolution for types that were not applied was
handled like this:
```scala
      case defn.FunctionOf(args, resultType, _) =>
        narrowByTypes(alts, args, resultType)

      case pt =>
        val compat = alts.filterConserve(normalizedCompatible(_, pt, keepConstraint = false))
        if (compat.isEmpty)
          /*
           * the case should not be moved to the enclosing match
           * since SAM type must be considered only if there are no candidates
           * For example, the second f should be chosen for the following code:
           *   def f(x: String): Unit = ???
           *   def f: java.io.OutputStream = ???
           *   new java.io.ObjectOutputStream(f)
           */
          pt match {
            case SAMType(mtp, _) =>
              narrowByTypes(alts, mtp.paramInfos, mtp.resultType)
            case _ =>
              // pick any alternatives that are not methods since these might be convertible
              // to the expected type, or be used as extension method arguments.
              val convertible = alts.filterNot(alt =>
                  normalize(alt, IgnoredProto(pt)).widenSingleton.isInstanceOf[MethodType])
              if convertible.length == 1 then convertible else compat
          }
        else compat
```
Note the warning comment that the case for SAM types should not be moved
out, yet we do exactly the same thing for plain function types. I
believe this was simply wrong, but it was not discovered in a test.

Then in #16507 we changed the `defn.FunctionOf` extractor so that
aliases of function types were matched by it. This triggered test
failures since we now hit the wrong case with aliases of function types.

In #18286, we moved the extractor test around, but that was not enough,
as #19641 shows. Instead the test for `FunctionOf` should be aligned
with the test for SAM case. But it turns out that's not even necessary
since the
preceding `val compat = ...` handles function prototypes correctly by
simulating an eta expansion. So in the end
we could simply delete the problematic case.
@Kordyjan Kordyjan added this to the 3.4.1 milestone Feb 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:transform itype:bug itype:crash regression This worked in a previous version but doesn't anymore
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants