scala / bug

Scala 2 bug reports only. Please, no questions — proper bug reports only.
https://scala-lang.org
230 stars 21 forks source link

compiler crash when value class reference private companion object value #12768

Open xuwei-k opened 1 year ago

xuwei-k commented 1 year ago

Reproduction steps

scalaVersion: 2.12.17, 2.13.10, 2.13.11-M1, 2.13.11-bin-362a9f0-SNAPSHOT

full reproduce example repository is here

https://github.com/xuwei-k/value-class-private-companion-crash/commit/a00e275cbe8b2110dda4b8efb76ab4a09b196279

package p1

final class A(private val x1: String) extends AnyVal {
  def f: String = x1 + A.x2
}

private object A {
  private val x2: String = "x2"
}

trait C {
  implicit def stringToA(s: String): A = new A(s)
}
package p2

class C extends p1.C {
  def g = "a".f
}

Problem

ci-result

https://github.com/xuwei-k/value-class-private-companion-crash/actions/runs/4624877588/jobs/8180134576#step:4:24

[error] 
[error]   EmptyScope.enter
[error]      while compiling: /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/src/main/scala/B.scala
[error]         during phase: globalPhase=erasure, enteringPhase=posterasure
[error]      library version: version 2.13.10
[error]     compiler version: version 2.13.10
[error]   reconstructed args: -bootclasspath /opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/resources.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/rt.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/sunrsasign.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jsse.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jce.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/charsets.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jfr.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/classes:/home/runner/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar -classpath /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/target/scala-2.13/classes:/home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a1/target/scala-2.13/classes
[error] 
[error]   last tree to typer: TypeTree(class String)
[error]        tree position: line 4 of /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/src/main/scala/B.scala
[error]             tree tpe: String
[error]               symbol: final class String in package lang
[error]    symbol definition: final class String extends Serializable with Comparable with CharSequence (a ClassSymbol)
[error]       symbol package: java.lang
[error]        symbol owners: class String
[error]            call site: method g in class C in package p2
[error] 
[error] == Source file context for tree position ==
[error] 
[error]      1 package p2
[error]      2 
[error]      3 class C extends p1.C {
[error]      4   def g = "a".f
[error]      5 }
[error]      6 
exception when typing p1.<A: error>
exception when typing p1.<A: error>.f$extension
exception when typing p1.<A: error>.f$extension(C.this.stringToA("a"))
exception when typing def g(): String = p1.<A: error>.f$extension(C.this.stringToA("a"))
exception when typing class C extends Object with p1.C {
  def <init>(): p2.C = {
    C.super.<init>();
    ()
  };
  def g(): String = p1.<A: error>.f$extension(C.this.stringToA("a"))
}
exception when typing package p2 {
  class C extends Object with p1.C {
    def <init>(): p2.C = {
      C.super.<init>();
      ()
    };
    def g(): String = p1.<A: error>.f$extension(C.this.stringToA("a"))
  }
}
[error] ## Exception when compiling 1 sources to /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/target/scala-2.13/classes
[error] scala.reflect.internal.FatalError: 
[error]   EmptyScope.enter
[error]      while compiling: /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/src/main/scala/B.scala
[error]         during phase: globalPhase=erasure, enteringPhase=posterasure
[error]      library version: version 2.13.10
[error]     compiler version: version 2.13.10
[error]   reconstructed args: -bootclasspath /opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/resources.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/rt.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/sunrsasign.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jsse.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jce.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/charsets.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/lib/jfr.jar:/opt/hostedtoolcache/Java_Corretto_jdk/8.362.08.1/x64/jre/classes:/home/runner/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.10/scala-library-2.13.10.jar -classpath /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/target/scala-2.13/classes:/home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a1/target/scala-2.13/classes
[error] 
[error]   last tree to typer: TypeTree(class String)
[error]        tree position: line 4 of /home/runner/work/value-class-private-companion-crash/value-class-private-companion-crash/a2/src/main/scala/B.scala
[error]             tree tpe: String
[error]               symbol: final class String in package lang
[error]    symbol definition: final class String extends Serializable with Comparable with CharSequence (a ClassSymbol)
[error]       symbol package: java.lang
[error]        symbol owners: class String
[error]            call site: method g in class C in package p2
[error] 
[error] == Source file context for tree position ==
[error] 
[error]      1 package p2
[error]      2 
[error]      3 class C extends p1.C {
[error]      4   def g = "a".f
[error]      5 }
[error]      6 
[error] scala.reflect.internal.Reporting.abort(Reporting.scala:69)
[error] scala.reflect.internal.Reporting.abort$(Reporting.scala:65)
[error] scala.reflect.internal.SymbolTable.abort(SymbolTable.scala:28)
[error] scala.reflect.internal.Scopes$EmptyScope$.enterEntry(Scopes.scala:550)
[error] scala.reflect.internal.Scopes$Scope.enter(Scopes.scala:157)
[error] scala.reflect.internal.Symbols$Symbol.setInfoAndEnter(Symbols.scala:1610)
[error] scala.tools.nsc.typechecker.Implicits.memberWildcardType(Implicits.scala:349)
[error] scala.tools.nsc.typechecker.Implicits.memberWildcardType$(Implicits.scala:343)
[error] scala.tools.nsc.transform.Erasure.memberWildcardType(Erasure.scala:23)
[error] scala.tools.nsc.typechecker.Implicits$HasMember$.$anonfun$apply$1(Implicits.scala:360)
[error] scala.collection.mutable.HashMap.getOrElseUpdate(HashMap.scala:454)
[error] scala.tools.nsc.typechecker.Implicits$HasMember$.apply(Implicits.scala:360)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$adaptToMemberWithArgs$6(Typers.scala:1384)
[error] scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:712)
[error] scala.tools.nsc.typechecker.Typers$Typer.adaptToMemberWithArgs(Typers.scala:1384)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedSelect$1(Typers.scala:5370)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedSelectOrSuperCall$1(Typers.scala:5417)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5992)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.transform.Erasure$Eraser.adaptMember(Erasure.scala:739)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typed1$41(Typers.scala:5078)
[error] scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:698)
[error] scala.tools.nsc.typechecker.Typers$Typer.normalTypedApply$1(Typers.scala:5080)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:5110)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5991)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:6311)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5956)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6125)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3403)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3403)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:2057)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1895)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5957)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:6125)
[error] scala.tools.nsc.typechecker.Typers$Typer.$anonfun$typedStats$8(Typers.scala:3403)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:3403)
[error] scala.tools.nsc.typechecker.Typers$Typer.typedPackageDef$1(Typers.scala:5640)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:5960)
[error] scala.tools.nsc.transform.Erasure$Eraser.typed1(Erasure.scala:821)
[error] scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:6047)
[error] scala.tools.nsc.transform.Erasure$ErasureTransformer.$anonfun$transform$2(Erasure.scala:1394)
[error] scala.tools.nsc.transform.Erasure$ErasureTransformer.transform(Erasure.scala:1394)
[error] scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:182)
[error] scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:32)
[error] scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:467)
[error] scala.tools.nsc.Global$GlobalPhase.run(Global.scala:414)
[error] scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1530)
[error] scala.tools.nsc.Global$Run.compileUnits(Global.scala:1514)
[error] scala.tools.nsc.Global$Run.compileSources(Global.scala:1506)
[error] scala.tools.nsc.Global$Run.compileFiles(Global.scala:1619)
[error] xsbt.CachedCompiler0.run(CompilerBridge.scala:163)
[error] xsbt.CachedCompiler0.run(CompilerBridge.scala:134)
[error] xsbt.CompilerBridge.run(CompilerBridge.scala:39)
[error] sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$7(MixedAnalyzingCompiler.scala:193)
[error] scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] sbt.internal.inc.MixedAnalyzingCompiler.timed(MixedAnalyzingCompiler.scala:[24](https://github.com/xuwei-k/value-class-private-companion-crash/actions/runs/4624877588/jobs/8180134576#step:4:25)8)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4(MixedAnalyzingCompiler.scala:183)
[error] sbt.internal.inc.MixedAnalyzingCompiler.$anonfun$compile$4$adapted(MixedAnalyzingCompiler.scala:163)
[error] sbt.internal.inc.JarUtils$.withPreviousJar(JarUtils.scala:239)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compileScala$1(MixedAnalyzingCompiler.scala:163)
[error] sbt.internal.inc.MixedAnalyzingCompiler.compile(MixedAnalyzingCompiler.scala:211)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileInternal$1$adapted(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5(Incremental.scala:179)
[error] sbt.internal.inc.Incremental$.$anonfun$apply$5$adapted(Incremental.scala:177)
[error] sbt.internal.inc.Incremental$$anon$2.run(Incremental.scala:463)
[error] sbt.internal.inc.IncrementalCommon$CycleState.next(IncrementalCommon.scala:116)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:56)
[error] sbt.internal.inc.IncrementalCommon$$anon$1.next(IncrementalCommon.scala:52)
[error] sbt.internal.inc.IncrementalCommon.cycle(IncrementalCommon.scala:263)
[error] sbt.internal.inc.Incremental$.$anonfun$incrementalCompile$8(Incremental.scala:418)
[error] sbt.internal.inc.Incremental$.withClassfileManager(Incremental.scala:506)
[error] sbt.internal.inc.Incremental$.incrementalCompile(Incremental.scala:405)
[error] sbt.internal.inc.Incremental$.apply(Incremental.scala:171)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileInternal(IncrementalCompilerImpl.scala:534)
[error] sbt.internal.inc.IncrementalCompilerImpl.$anonfun$compileIncrementally$1(IncrementalCompilerImpl.scala:488)
[error] sbt.internal.inc.IncrementalCompilerImpl.handleCompilationError(IncrementalCompilerImpl.scala:332)
[error] sbt.internal.inc.IncrementalCompilerImpl.compileIncrementally(IncrementalCompilerImpl.scala:4[25](https://github.com/xuwei-k/value-class-private-companion-crash/actions/runs/4624877588/jobs/8180134576#step:4:26))
[error] sbt.internal.inc.IncrementalCompilerImpl.compile(IncrementalCompilerImpl.scala:137)
[error] sbt.Defaults$.compileIncrementalTaskImpl(Defaults.scala:2363)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$2(Defaults.scala:2313)
[error] sbt.internal.server.BspCompileTask$.$anonfun$compute$1(BspCompileTask.scala:30)
[error] sbt.internal.io.Retry$.apply(Retry.scala:46)
[error] sbt.internal.io.Retry$.apply(Retry.scala:28)
[error] sbt.internal.io.Retry$.apply(Retry.scala:23)
[error] sbt.internal.server.BspCompileTask$.compute(BspCompileTask.scala:30)
[error] sbt.Defaults$.$anonfun$compileIncrementalTask$1(Defaults.scala:2311)
[error] scala.Function1.$anonfun$compose$1(Function1.scala:49)
[error] sbt.internal.util.$tilde$greater.$anonfun$$u2219$1(TypeFunctions.scala:62)
[error] sbt.std.Transform$$anon$4.work(Transform.scala:68)
[error] sbt.Execute.$anonfun$submit$2(Execute.scala:282)
[error] sbt.internal.util.ErrorHandling$.wideConvert(ErrorHandling.scala:23)
[error] sbt.Execute.work(Execute.scala:291)
[error] sbt.Execute.$anonfun$submit$1(Execute.scala:282)
[error] sbt.ConcurrentRestrictions$$anon$4.$anonfun$submitValid$1(ConcurrentRestrictions.scala:[26](https://github.com/xuwei-k/value-class-private-companion-crash/actions/runs/4624877588/jobs/8180134576#step:4:27)5)
[error] sbt.CompletionService$$anon$2.call(CompletionService.scala:64)
[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:7[50](https://github.com/xuwei-k/value-class-private-companion-crash/actions/runs/4624877588/jobs/8180134576#step:4:51))