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

compiler crash involving traits, public/private, and separate compilation #3076

Closed
scabug opened this issue Feb 19, 2010 · 4 comments
Closed
Assignees

Comments

@scabug
Copy link

scabug commented Feb 19, 2010

  ~/newbug> rm *.class
  ~/newbug> cat T.scala                                               
trait T { private val z = new C1 }
private class C1
  ~/newbug> /usr/local/scala-2.8.0.Beta1-prerelease/bin/scalac T.scala 
  ~/newbug> cat C.scala 
class C2 {
  def m1() { new T { } }
  def m2() { new T { } }
}
  ~/newbug> /usr/local/scala-2.8.0.Beta1-prerelease/bin/scalac C.scala
exception when typing final <stable> <accessor> def T$$$$z(): C1 = C2$$$$anon$$2.this.T$$$$z
private class C1 escapes its defining scope as part of type C1 in file null
scala.tools.nsc.symtab.Types$$TypeError: private class C1 escapes its defining scope as part of type C1
	at scala.tools.nsc.typechecker.Contexts$$Context.error(Contexts.scala:318)
	at scala.tools.nsc.typechecker.Infer$$Inferencer.error(Infer.scala:273)
	at scala.tools.nsc.typechecker.Typers$$Typer$$checkNoEscaping$$.check(Typers.scala:444)
	at scala.tools.nsc.typechecker.Typers$$Typer.typedDefDef(Typers.scala:1807)
	at scala.tools.nsc.typechecker.Typers$$Typer.typed1(Typers.scala:3751)
	at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:627)
	at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:626)
	at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4087)
	at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4140)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.typedPos(Mixin.scala:431)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.attributedDef$$1(Mixin.scala:543)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.addDef$$1(Mixin.scala:553)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$addNewDefs$$1.apply(Mixin.scala:844)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$addNewDefs$$1.apply(Mixin.scala:834)
	at scala.collection.LinearSeqLike$$class.foreach(LinearSeqLike.scala:97)
	at scala.collection.immutable.List.foreach(List.scala:46)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.addNewDefs(Mixin.scala:834)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.scala$$tools$$nsc$$transform$$Mixin$$MixinTransformer$$$$postTransform(Mixin.scala:964)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$16.apply(Mixin.scala:1060)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$16.apply(Mixin.scala:1060)
	at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:99)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1060)
	at scala.tools.nsc.ast.Trees$$Transformer.transformTemplate(Trees.scala:1556)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1446)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1445)
	at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1580)
	at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1444)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1059)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1572)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1570)
	at scala.collection.immutable.List.loop$$1(List.scala:116)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.collection.immutable.List.loop$$1(List.scala:120)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.collection.immutable.List.loop$$1(List.scala:120)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1570)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1440)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1440)
	at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1580)
	at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1439)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1059)
	at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:1573)
	at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:31)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:281)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:281)
	at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
	at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:281)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:259)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:259)
	at scala.collection.Iterator$$class.foreach(Iterator.scala:582)
	at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:285)
	at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:259)
	at scala.tools.nsc.Global$$Run.compileSources(Global.scala:749)
	at scala.tools.nsc.Global$$Run.compile(Global.scala:839)
	at scala.tools.nsc.Main$$.process(Main.scala:110)
	at scala.tools.nsc.Main$$.main(Main.scala:124)
	at scala.tools.nsc.Main.main(Main.scala)
Exception in thread "main" java.lang.Error
	at scala.tools.nsc.transform.Erasure$$Eraser.liftedTree1$$1(Erasure.scala:637)
	at scala.tools.nsc.transform.Erasure$$Eraser.typed1(Erasure.scala:626)
	at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4087)
	at scala.tools.nsc.typechecker.Typers$$Typer.typed(Typers.scala:4140)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.typedPos(Mixin.scala:431)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.attributedDef$$1(Mixin.scala:543)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.addDef$$1(Mixin.scala:553)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$addNewDefs$$1.apply(Mixin.scala:844)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$addNewDefs$$1.apply(Mixin.scala:834)
	at scala.collection.LinearSeqLike$$class.foreach(LinearSeqLike.scala:97)
	at scala.collection.immutable.List.foreach(List.scala:46)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.addNewDefs(Mixin.scala:834)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.scala$$tools$$nsc$$transform$$Mixin$$MixinTransformer$$$$postTransform(Mixin.scala:964)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$16.apply(Mixin.scala:1060)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer$$$$anonfun$$16.apply(Mixin.scala:1060)
	at scala.tools.nsc.symtab.SymbolTable.atPhase(SymbolTable.scala:99)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1060)
	at scala.tools.nsc.ast.Trees$$Transformer.transformTemplate(Trees.scala:1556)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1446)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$2.apply(Trees.scala:1445)
	at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1580)
	at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1444)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1059)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1572)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transformStats$$1.apply(Trees.scala:1570)
	at scala.collection.immutable.List.loop$$1(List.scala:116)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.collection.immutable.List.loop$$1(List.scala:120)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.collection.immutable.List.loop$$1(List.scala:120)
	at scala.collection.immutable.List.mapConserve(List.scala:133)
	at scala.tools.nsc.ast.Trees$$Transformer.transformStats(Trees.scala:1570)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1440)
	at scala.tools.nsc.ast.Trees$$Transformer$$$$anonfun$$transform$$1.apply(Trees.scala:1440)
	at scala.tools.nsc.ast.Trees$$Transformer.atOwner(Trees.scala:1580)
	at scala.tools.nsc.ast.Trees$$Transformer.transform(Trees.scala:1439)
	at scala.tools.nsc.transform.Mixin$$MixinTransformer.transform(Mixin.scala:1059)
	at scala.tools.nsc.ast.Trees$$Transformer.transformUnit(Trees.scala:1573)
	at scala.tools.nsc.transform.Transform$$Phase.apply(Transform.scala:31)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:281)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$applyPhase$$1.apply(Global.scala:281)
	at scala.tools.nsc.reporters.Reporter.withSource(Reporter.scala:48)
	at scala.tools.nsc.Global$$GlobalPhase.applyPhase(Global.scala:281)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:259)
	at scala.tools.nsc.Global$$GlobalPhase$$$$anonfun$$run$$1.apply(Global.scala:259)
	at scala.collection.Iterator$$class.foreach(Iterator.scala:582)
	at scala.collection.mutable.ListBuffer$$$$anon$$1.foreach(ListBuffer.scala:285)
	at scala.tools.nsc.Global$$GlobalPhase.run(Global.scala:259)
	at scala.tools.nsc.Global$$Run.compileSources(Global.scala:749)
	at scala.tools.nsc.Global$$Run.compile(Global.scala:839)
	at scala.tools.nsc.Main$$.process(Main.scala:110)
	at scala.tools.nsc.Main$$.main(Main.scala:124)
	at scala.tools.nsc.Main.main(Main.scala)

note that there are two separate stack traces here.

the same thing happens in 2.7.7, too.

@scabug
Copy link
Author

scabug commented Feb 19, 2010

Imported From: https://issues.scala-lang.org/browse/SI-3076?orig=1
Reporter: @SethTisue

@scabug
Copy link
Author

scabug commented Feb 23, 2010

@axel22 said:
This seems to be fixed in scala 2.8 r20879. Since T is not in classpath, it behaves as expected.

~/tmp/scala-2.8.0.r20879-b20100214020153/bin$$ cat T.scala
trait T { private val z = new C1 }
private class C1

~/tmp/scala-2.8.0.r20879-b20100214020153/bin$$ cat C.scala
class C2 {
  def m1() { new T { } }
  def m2() { new T { } }
}

~/tmp/scala-2.8.0.r20879-b20100214020153/bin$$ ./scalac T.scala

~/tmp/scala-2.8.0.r20879-b20100214020153/bin$$ ./scalac C.scala
C.scala:2: error: not found: type T
  def m1() { new T { } }
                 ^
C.scala:3: error: not found: type T
  def m2() { new T { } }
                 ^
two errors found

@scabug
Copy link
Author

scabug commented Feb 23, 2010

@harrah said:
The error still occurs in r20961.

T is on the classpath. There is no classpath otherwise specified, so the current directory is on the classpath. Perhaps r20879 just caught the classpaths rework at a bad time.

@scabug
Copy link
Author

scabug commented Mar 1, 2010

@odersky said:
(In r21019) Closes #3076. Review by community.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants