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

Type inference for annotations curio / -Ycheck #2577

Closed
scabug opened this issue Nov 5, 2009 · 5 comments
Closed

Type inference for annotations curio / -Ycheck #2577

scabug opened this issue Nov 5, 2009 · 5 comments

Comments

@scabug
Copy link

scabug commented Nov 5, 2009

Consider the following code:

case class annot[T] extends StaticAnnotation

// type inference should infer @annot[Nothing] instead of @annot[T]
// note the T is not in scope here!
class Foo[@annot U] {
  val x = new Foo
}

Compilation succeeds, but crashes if I pass -Ycheck:ref to scalac. If you wonder about a use case, it's for @specialized, which I'd like to be able to use with no type arguments.

@scabug
Copy link
Author

scabug commented Nov 5, 2009

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

@scabug
Copy link
Author

scabug commented Jun 4, 2010

@paulp said:
See also #1424 which I closed as a duplicate of this. Not 100% sure if by "crashes" iulian means this:

 found   : Any
 required: AnyRef
case class annot[T] extends StaticAnnotation
           ^

If so, then safely duplicates.

@scabug
Copy link
Author

scabug commented May 12, 2012

@soc said:
Probably this:

% scala -Ycheck:ref
Welcome to Scala version 2.10.0-20120511-110655-3511e5960d (OpenJDK 64-Bit Server VM, Java 1.7.0_03).
Type in expressions to have them evaluated.
Type :help for more information.

scala> [init] [Now checking: refchecks]
[Now checking: refchecks]
[Now checking: refchecks]
[Now checking: refchecks]


scala> case class annot[T] extends annotation.StaticAnnotation
[Now checking: refchecks]
[check: refchecks] <console>:7: trees differ
 old: T [scala.reflect.api.Trees$Ident] (tpe = T)
 new: T [scala.reflect.api.Trees$TypeTree] (tpe = T)
[check: refchecks] <console>:7: trees differ
 old: $iw.this.annot[T] [scala.reflect.api.Trees$AppliedTypeTree] (tpe = null)
 new: annot[T] [scala.reflect.api.Trees$TypeTree] (tpe = annot[T])
error: 
     while compiling: <console>
        during phase: selectiveanf
     library version: version 2.10.0-20120511-110655-3511e5960d
    compiler version: version 2.10.0-20120511-110655-3511e5960d
  reconstructed args: -Ycheck:ref

  last tree to typer: Ident(x)
              symbol: value x (flags: <param> <synthetic>)
   symbol definition: x: Any
                 tpe: Any
       symbol owners: value x
      context owners: method copy -> class annot -> object $iw -> object $iw -> object $read -> package $line3

== Enclosing template or block ==

ApplyConstructor( // def <init>(): annot[T] in class annot
  new this.annot[T]."<init>" // def <init>(): annot[T] in class annot
  Nil
)

== Expanded type of tree ==

TypeRef(TypeSymbol(abstract class Any extends ))

uncaught exception during compilation: java.lang.NullPointerException
java.lang.NullPointerException
	at scala.tools.nsc.typechecker.Typers$Typer.typedTypeConstructor(Typers.scala:5149)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTypeConstructor(Typers.scala:5175)
	at scala.tools.nsc.typechecker.Typers$Typer.typedNew$1(Typers.scala:3916)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4755)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5091)
	at scala.tools.nsc.typechecker.Typers$Typer.typedQualifier(Typers.scala:5097)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4878)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$85.apply(Typers.scala:4108)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$85.apply(Typers.scala:4108)
	at scala.tools.nsc.typechecker.Typers$Typer.silent(Typers.scala:719)
	at scala.tools.nsc.typechecker.Typers$Typer.typedApply$1(Typers.scala:4108)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4837)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.transformedOrTyped(Typers.scala:5216)
	at scala.tools.nsc.typechecker.Typers$Typer.typedDefDef(Typers.scala:1979)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4661)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2563)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.collection.immutable.List.loop$1(List.scala:163)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2658)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1723)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$39.apply(Typers.scala:1586)
	at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1585)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4648)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2563)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.collection.immutable.List.loop$1(List.scala:163)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2658)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1723)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$39.apply(Typers.scala:1586)
	at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1585)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4648)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2563)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.collection.immutable.List.loop$1(List.scala:163)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2658)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1723)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$39.apply(Typers.scala:1586)
	at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1585)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4648)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2563)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.collection.immutable.List.loop$1(List.scala:163)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2658)
	at scala.tools.nsc.typechecker.Typers$Typer.typedTemplate(Typers.scala:1723)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$39.apply(Typers.scala:1586)
	at scala.tools.nsc.typechecker.Typers$Typer.typedClassDef(Typers.scala:1585)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4648)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStat$1(Typers.scala:2563)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59$$anonfun$60.apply(Typers.scala:2659)
	at scala.collection.immutable.List.loop$1(List.scala:163)
	at scala.collection.immutable.List.mapConserve(List.scala:179)
	at scala.tools.nsc.typechecker.Typers$Typer$$anonfun$59.apply(Typers.scala:2659)
	at scala.tools.nsc.typechecker.Typers$Typer.typedStats(Typers.scala:2658)
	at scala.tools.nsc.typechecker.Typers$Typer.typed1(Typers.scala:4644)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5011)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.scala$tools$nsc$typechecker$TreeCheckers$TreeChecker$$super$typed(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker$$anonfun$typed$1.apply(TreeCheckers.scala:218)
	at scala.tools.nsc.typechecker.TreeCheckers$TreeChecker.typed(TreeCheckers.scala:210)
	at scala.tools.nsc.typechecker.Typers$Typer.typed(Typers.scala:5069)
	at scala.tools.nsc.typechecker.TreeCheckers$$anonfun$check$1.apply$mcV$sp(TreeCheckers.scala:176)
	at scala.tools.nsc.typechecker.TreeCheckers.runWithUnit(TreeCheckers.scala:162)
	at scala.tools.nsc.typechecker.TreeCheckers.check(TreeCheckers.scala:174)
	at scala.tools.nsc.typechecker.TreeCheckers$$anonfun$checkTrees$1.apply(TreeCheckers.scala:149)
	at scala.tools.nsc.typechecker.TreeCheckers$$anonfun$checkTrees$1.apply(TreeCheckers.scala:149)
	at scala.collection.Iterator$class.foreach(Iterator.scala:724)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1152)
	at scala.tools.nsc.typechecker.TreeCheckers.checkTrees(TreeCheckers.scala:149)
	at scala.tools.nsc.Global$Run.runCheckers(Global.scala:1309)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1436)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1373)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1367)
	at scala.tools.nsc.interpreter.IMain.compileSourcesKeepingRun(IMain.scala:461)
	at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compileAndSaveRun(IMain.scala:845)
	at scala.tools.nsc.interpreter.IMain$ReadEvalPrint.compile(IMain.scala:803)
	at scala.tools.nsc.interpreter.IMain$Request.compile$lzycompute(IMain.scala:979)
	at scala.tools.nsc.interpreter.IMain$Request.compile(IMain.scala:974)
	at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:629)
	at scala.tools.nsc.interpreter.IMain.interpret(IMain.scala:595)
	at scala.tools.nsc.interpreter.ILoop.reallyInterpret$1(ILoop.scala:826)
	at scala.tools.nsc.interpreter.ILoop.interpretStartingWith(ILoop.scala:883)
	at scala.tools.nsc.interpreter.ILoop.command(ILoop.scala:783)
	at scala.tools.nsc.interpreter.ILoop.processLine$1(ILoop.scala:647)
	at scala.tools.nsc.interpreter.ILoop.innerLoop$1(ILoop.scala:654)
	at scala.tools.nsc.interpreter.ILoop.loop(ILoop.scala:657)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply$mcZ$sp(ILoop.scala:962)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:924)
	at scala.tools.nsc.interpreter.ILoop$$anonfun$process$1.apply(ILoop.scala:924)
	at scala.tools.nsc.util.ScalaClassLoader$.savingContextLoader(ScalaClassLoader.scala:157)
	at scala.tools.nsc.interpreter.ILoop.process(ILoop.scala:924)
	at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:79)
	at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:92)
	at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:101)
	at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)

That entry seems to have slain the compiler.  Shall I replay
your session? I can re-run each line except the last one.
[y/n]
Abandoning crashed session.

@scabug
Copy link
Author

scabug commented May 12, 2012

@soc said (edited on May 12, 2012 1:37:30 PM UTC):
Weird ... not sure anymore that the crash is related to the issue, #4774 has a similar crash when running with -Ycheck:ref. Sorry for the spam. :—/

@scabug
Copy link
Author

scabug commented Dec 22, 2012

@paulp said:
Moving the action to #6860.

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

No branches or pull requests

2 participants