Very specific bug makes some implicits invisible
kubukoz opened this issue · 8 comments
In this snippet:
for {
_ <- Option(1)
implicit0(one: One) <- Option(One())
x = dummy()
implicit0(two: Two) = Two()
_ = foo
} yield "ok"
I get an error:
TestImplicitPatterns.scala:57:19: could not find implicit value for parameter a: Two
[error] _ = foo
[error] ^
I reproduced it as a test case, along with some details of what specific combination of features causes an error, in kubukoz@2640033.
Let me know if you know what the possible underlying cause is. Thanks!
Try disabling untupling. Shouldn't have any behavioral changes, but it's a pretty fragile area that caused issues with =
in the past.
Unexpected error when compiling root: 'Position.point on NoPosition'
(after adding -P:bm4:no-tupling:n
)
That's even more interesting (and probably a lot of pain). I'll take a look near the end of this week if I have some time.
Here's a full stack trace (no mention of bm4 in there):
[error] Position.point on NoPosition
[error] scala.reflect.internal.util.Position.fail(Position.scala:24)
[error] scala.reflect.internal.util.UndefinedPosition.point(Position.scala:102)
[error] scala.reflect.internal.util.UndefinedPosition.point(Position.scala:97)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused$UnusedPrivates.sympos(TypeDiagnostics.scala:609)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused$UnusedPrivates.$anonfun$unusedPatVars$2(TypeDiagnostics.scala:630)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused$UnusedPrivates.$anonfun$unusedPatVars$2$adapted(TypeDiagnostics.scala:630)
[error] scala.math.Ordering$$anon$2.compare(Ordering.scala:125)
[error] java.util.TimSort.countRunAndMakeAscending(TimSort.java:355)
[error] java.util.TimSort.sort(TimSort.java:220)
[error] java.util.Arrays.sort(Arrays.java:1438)
[error] scala.collection.SeqLike.sorted(SeqLike.scala:659)
[error] scala.collection.SeqLike.sorted$(SeqLike.scala:647)
[error] scala.collection.AbstractSeq.sorted(Seq.scala:45)
[error] scala.collection.SeqLike.sortBy(SeqLike.scala:634)
[error] scala.collection.SeqLike.sortBy$(SeqLike.scala:634)
[error] scala.collection.AbstractSeq.sortBy(Seq.scala:45)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused$UnusedPrivates.unusedPatVars(TypeDiagnostics.scala:630)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused.run(TypeDiagnostics.scala:701)
[error] scala.tools.nsc.typechecker.TypeDiagnostics$checkUnused.apply(TypeDiagnostics.scala:729)
[error] scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.apply(Analyzer.scala:119)
[error] scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:448)
[error] scala.tools.nsc.typechecker.Analyzer$typerFactory$TyperPhase.run(Analyzer.scala:103)
[error] scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1498)
[error] scala.tools.nsc.Global$Run.compileUnits(Global.scala:1482)
[error] scala.tools.nsc.Global$Run.compileSources(Global.scala:1475)
[error] scala.tools.nsc.Global$Run.compile(Global.scala:1598)
[error] xsbt.CachedCompiler0.run(CompilerInterface.scala:130)
[error] xsbt.CachedCompiler0.run(CompilerInterface.scala:105)
[error] xsbt.CompilerInterface.run(CompilerInterface.scala:31)
[error] sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] java.lang.reflect.Method.invoke(Method.java:498)
[error] sbt.internal.inc.AnalyzingCompiler.call(AnalyzingCompiler.scala:237)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:111)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:90)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$3(MixedAnalyzingCompiler.scala:82)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:133)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:73)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:116)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:307)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:307)
[error] sbt.internal.inc.Incremental$.doCompile(Incremental.scala:106)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$4(Incremental.scala:87)
[error] sbt.internal.inc.IncrementalCommon.recompileClasses(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:63)
[error] sbt.internal.inc.Incremental$.$anonfun$compile$3(Incremental.scala:89)
[error] sbt.internal.inc.Incremental$.manageClassfiles(Incremental.scala:134)
[error] sbt.internal.inc.Incremental$.compile(Incremental.scala:80)
[error] sbt.internal.inc.IncrementalCompile$.apply(Compile.scala:67)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:311)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:269)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:159)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:238)
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:69)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:1549)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:1523)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:44)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:40)
[error] sbt.std.Transform$$anon$4.work(System.scala:67)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:269)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:16)
[error] sbt.Execute.work(Execute.scala:278)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:269)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:178)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:37)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
[error] java.util.concurrent.FutureTask.run(FutureTask.java:266)
[error] java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[error] java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[error] java.lang.Thread.run(Thread.java:748)
Sure, no hurry. Reordering statements in the for comprehension is a fair workaround for now.
I'll roll it out later today.
Cool, thanks