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: assertion failed: javax.annotation.CheckReturnValue #8978

Closed
scabug opened this issue Nov 12, 2014 · 5 comments
Closed

Compiler crash: assertion failed: javax.annotation.CheckReturnValue #8978

scabug opened this issue Nov 12, 2014 · 5 comments

Comments

@scabug
Copy link

scabug commented Nov 12, 2014

I have isolated a compiler crash.

I haven't been able to find a pre-existing issue; sorry if I missed one.

It is triggered by a particular method in Google Guava (a Java lib). Perhaps there is something unusual about that method?

Please let me know if I can provide any further information.

Source code to reproduce

Available at https://github.com/RichardBradley/scala-compiler-crash

project/Build.scala

import sbt._
import sbt.Keys._

object TestProject extends Build {
  lazy val project = Project("Test", file("."))
    .settings(libraryDependencies ++= Seq(
      "com.google.guava"    %   "guava"         % "17.0"))
}

src/main/scala/Test.scala

import com.google.common.io.BaseEncoding

import Test._

class Test {

  def encode(s: String): String = {
    myEncoding.encode(s.getBytes())
  }
}

object Test {
  val myEncoding: BaseEncoding = BaseEncoding.base64Url().omitPadding()

}

Then run sbt compile

Compiler crash output

[info] Loading project definition from E:\Work\compiler-error\project
[info] Set current project to Test (in build file:/E:/Work/compiler-error/)
[info] Compiling 1 Scala source to E:\Work\compiler-error\target\scala-2.10\classes...
[warn] Class javax.annotation.CheckReturnValue not found - continuing with a stub.
[warn] Class javax.annotation.CheckReturnValue not found - continuing with a stub.
[warn] Class javax.annotation.CheckReturnValue not found - continuing with a stub.
[warn] Class javax.annotation.CheckReturnValue not found - continuing with a stub.
[warn] Class javax.annotation.CheckReturnValue not found - continuing with a stub.
[error] 
[error]      while compiling: E:\Work\compiler-error\src\main\scala\Test.scala
[error]         during phase: refchecks
[error]      library version: version 2.10.4
[error]     compiler version: version 2.10.4
[error]   reconstructed args: -bootclasspath C:\Program Files (x86)\Java\jre7\lib\resources.jar;C:\Program Files (x86)\Java\jre7\lib\rt.jar;C:\Program Files (x86)\Java\jre7\lib\sunrsasign.jar;C:\Program Files (x86)\Java\jre7\lib\jsse.jar;C:\Program Files (x86)\Java\jre7\lib\jce.jar;C:\Program Files (x86)\Java\jre7\lib\charsets.jar;C:\Program Files (x86)\Java\jre7\lib\jfr.jar;C:\Program Files (x86)\Java\jre7\classes;C:\Users\rtb\.sbt\boot\scala-2.10.4\lib\scala-library.jar -classpath E:\Work\compiler-error\target\scala-2.10\classes;C:\Users\rtb\.ivy2\cache\com.google.guava\guava\bundles\guava-17.0.jar
[error] 
[error]   last tree to typer: This(object Test)
[error]               symbol: object Test (flags: <module>)
[error]    symbol definition: class Test extends AnyRef
[error]                  tpe: Test.type
[error]        symbol owners: object Test -> package <empty>
[error]       context owners: object Test -> package <empty>
[error] 
[error] == Enclosing template or block ==
[error] 
[error] Template( // val <local Test>: <notype> in object Test, tree.tpe=Test.type

[error]   "java.lang.Object" // parents

[error]   ValDef(

[error]     private

[error]     "_"

[error]     <tpt>

[error]     <empty>

[error]   )

[error]   // 3 statements

[error]   DefDef( // def <init>(): Test.type in object Test

[error]     <method>

[error]     "<init>"

[error]     []

[error]     List(Nil)

[error]     <tpt> // tree.tpe=Test.type

[error]     Block( // tree.tpe=Unit

[error]       Apply( // def <init>(): Object in class Object, tree.tpe=Object

[error]         Test.super."<init>" // def <init>(): Object in class Object, tree.tpe=()Object

[error]         Nil

[error]       )

[error]       ()

[error]     )

[error]   )

[error]   ValDef( // private[this] val myEncoding: com.google.common.io.BaseEncoding in object Test

[error]     private <local> <triedcooking>

[error]     "myEncoding "

[error]     <tpt> // tree.tpe=com.google.common.io.BaseEncoding

[error]     Apply( // def omitPadding(): com.google.common.io.BaseEncoding in class BaseEncoding, tree.tpe=com.google.common.io.BaseEncoding

[error]       com.google.common.io.BaseEncoding.base64Url()."omitPadding" // def omitPadding(): com.google.common.io.BaseEncoding in class BaseEncoding, tree.tpe=()com.google.common.io.BaseEncoding

[error]       Nil

[error]     )

[error]   )

[error]   DefDef( // val myEncoding: com.google.common.io.BaseEncoding in object Test

[error]     <method> <stable> <accessor> <triedcooking>

[error]     "myEncoding"

[error]     []

[error]     Nil

[error]     <tpt> // tree.tpe=com.google.common.io.BaseEncoding

[error]     Test.this."myEncoding " // private[this] val myEncoding: com.google.common.io.BaseEncoding in object Test, tree.tpe=com.google.common.io.BaseEncoding

[error]   )

[error] )
[error] 
[error] == Expanded type of tree ==
[error] 
[error] ThisType(object Test)
[error] 
[error] uncaught exception during compilation: java.lang.AssertionError
java.lang.AssertionError: assertion failed: javax.annotation.CheckReturnValue
	at scala.reflect.internal.Symbols$Symbol.info(Symbols.scala:1212)
	at scala.reflect.internal.Symbols$TypeSymbol.isNonBottomSubClass(Symbols.scala:2821)
	at scala.reflect.internal.AnnotationInfos$AnnotationInfo.matches(AnnotationInfos.scala:295)
	at scala.reflect.internal.AnnotationInfos$Annotatable$class.dropOtherAnnotations(AnnotationInfos.scala:65)
	at scala.reflect.internal.AnnotationInfos$Annotatable$class.hasAnnotation(AnnotationInfos.scala:50)
	at scala.reflect.internal.Symbols$Symbol.hasAnnotation(Symbols.scala:112)
	at scala.reflect.internal.Symbols$Symbol.isDeprecated(Symbols.scala:723)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.checkDeprecated(RefChecks.scala:1385)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformSelect(RefChecks.scala:1648)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1814)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:96)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1219)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1841)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:96)
	at scala.reflect.internal.Trees$$anonfun$itransform$1.apply(Trees.scala:1229)
	at scala.reflect.internal.Trees$$anonfun$itransform$1.apply(Trees.scala:1228)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1227)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1841)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStat(RefChecks.scala:1337)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer$$anonfun$transformStats$1.apply(RefChecks.scala:1268)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer$$anonfun$transformStats$1.apply(RefChecks.scala:1268)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
	at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStats(RefChecks.scala:1268)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStats(RefChecks.scala:96)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1276)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1841)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:96)
	at scala.reflect.api.Trees$Transformer.transformTemplate(Trees.scala:2904)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1280)
	at scala.reflect.internal.Trees$$anonfun$itransform$4.apply(Trees.scala:1279)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1278)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1841)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:96)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:2900)
	at scala.reflect.api.Trees$Transformer$$anonfun$transformTrees$1.apply(Trees.scala:2900)
	at scala.collection.immutable.List.loop$1(List.scala:170)
	at scala.collection.immutable.List.mapConserve(List.scala:186)
	at scala.reflect.api.Trees$Transformer.transformTrees(Trees.scala:2900)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.eliminateModuleDefs(RefChecks.scala:1316)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStat(RefChecks.scala:1335)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer$$anonfun$transformStats$1.apply(RefChecks.scala:1268)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer$$anonfun$transformStats$1.apply(RefChecks.scala:1268)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
	at scala.collection.immutable.List.foreach(List.scala:318)
	at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
	at scala.collection.AbstractTraversable.flatMap(Traversable.scala:105)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStats(RefChecks.scala:1268)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transformStats(RefChecks.scala:96)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
	at scala.reflect.internal.Trees$$anonfun$itransform$7.apply(Trees.scala:1298)
	at scala.reflect.api.Trees$Transformer.atOwner(Trees.scala:2936)
	at scala.reflect.internal.Trees$class.itransform(Trees.scala:1297)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.internal.SymbolTable.itransform(SymbolTable.scala:13)
	at scala.reflect.api.Trees$Transformer.transform(Trees.scala:2897)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:1841)
	at scala.tools.nsc.typechecker.RefChecks$RefCheckTransformer.transform(RefChecks.scala:96)
	at scala.tools.nsc.ast.Trees$Transformer.transformUnit(Trees.scala:227)
	at scala.tools.nsc.transform.Transform$Phase.apply(Transform.scala:30)
	at scala.tools.nsc.Global$GlobalPhase.applyPhase(Global.scala:464)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.tools.nsc.Global$GlobalPhase$$anonfun$run$1.apply(Global.scala:431)
	at scala.collection.Iterator$class.foreach(Iterator.scala:727)
	at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)
	at scala.tools.nsc.Global$GlobalPhase.run(Global.scala:431)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1583)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1557)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1553)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1662)
	at xsbt.CachedCompiler0.run(CompilerInterface.scala:123)
	at xsbt.CachedCompiler0.run(CompilerInterface.scala:99)
	at xsbt.CompilerInterface.run(CompilerInterface.scala:27)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at sbt.compiler.AnalyzingCompiler.call(AnalyzingCompiler.scala:102)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:48)
	at sbt.compiler.AnalyzingCompiler.compile(AnalyzingCompiler.scala:41)
	at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply$mcV$sp(AggressiveCompile.scala:99)
	at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:99)
	at sbt.compiler.AggressiveCompile$$anonfun$3$$anonfun$compileScala$1$1.apply(AggressiveCompile.scala:99)
	at sbt.compiler.AggressiveCompile.sbt$compiler$AggressiveCompile$$timed(AggressiveCompile.scala:166)
	at sbt.compiler.AggressiveCompile$$anonfun$3.compileScala$1(AggressiveCompile.scala:98)
	at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:143)
	at sbt.compiler.AggressiveCompile$$anonfun$3.apply(AggressiveCompile.scala:87)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:39)
	at sbt.inc.IncrementalCompile$$anonfun$doCompile$1.apply(Compile.scala:37)
	at sbt.inc.IncrementalCommon.cycle(Incremental.scala:99)
	at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:38)
	at sbt.inc.Incremental$$anonfun$1.apply(Incremental.scala:37)
	at sbt.inc.Incremental$.manageClassfiles(Incremental.scala:65)
	at sbt.inc.Incremental$.compile(Incremental.scala:37)
	at sbt.inc.IncrementalCompile$.apply(Compile.scala:27)
	at sbt.compiler.AggressiveCompile.compile2(AggressiveCompile.scala:157)
	at sbt.compiler.AggressiveCompile.compile1(AggressiveCompile.scala:71)
	at sbt.compiler.AggressiveCompile.apply(AggressiveCompile.scala:46)
	at sbt.Compiler$.apply(Compiler.scala:75)
	at sbt.Compiler$.apply(Compiler.scala:66)
	at sbt.Defaults$.sbt$Defaults$$compileTaskImpl(Defaults.scala:770)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:762)
	at sbt.Defaults$$anonfun$compileTask$1.apply(Defaults.scala:762)
	at scala.Function1$$anonfun$compose$1.apply(Function1.scala:47)
	at sbt.$tilde$greater$$anonfun$$u2219$1.apply(TypeFunctions.scala:42)
	at sbt.std.Transform$$anon$4.work(System.scala:64)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
	at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
	at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
	at sbt.Execute.work(Execute.scala:244)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
	at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
	at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
	at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
[error] (compile:compile) java.lang.AssertionError: assertion failed: javax.annotation.CheckReturnValue
[error] Total time: 2 s, completed 12-Nov-2014 14:07:58

Environment details

Scala version 2.10.4

Windows 7 64bit

$ java -version
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) Client VM (build 24.65-b04, mixed mode, sharing)

$ sbt --version
sbt launcher version 0.13.5

Other notes

The code compiles fine if you delete the call to omitPadding() on line 13 of Test.scala -- there must be something about that method which upsets scalac.

@scabug
Copy link
Author

scabug commented Nov 12, 2014

Imported From: https://issues.scala-lang.org/browse/SI-8978?orig=1
Reporter: Richard Bradley (richard.bradley)
Affected Versions: 2.10.4
Duplicates #7751

@scabug
Copy link
Author

scabug commented Nov 13, 2014

@soc said:
This has been improved and works in Scala 2.11.4.
See also https://groups.google.com/forum/#!topic/scala-internals/S4_upvOA2Eg.

@scabug scabug closed this as completed Nov 13, 2014
@scabug
Copy link
Author

scabug commented Nov 13, 2014

@retronym said:
Workaround for 2.10.x is to add "com.google.code.findbugs" % "jsr305" % "2.0.3" as an extra libraryDependency.

@scabug
Copy link
Author

scabug commented Nov 13, 2014

Richard Bradley (richard.bradley) said:
Thanks both.

@scabug
Copy link
Author

scabug commented Aug 15, 2016

Michael Ahlers (michaelahlers) said (edited on Aug 15, 2016 12:45:32 AM UTC):
Ran into this with Scala 2.11.8. For reference, that workaround is helpful (a must) for projects with "-Xfatal-warnings" enabled.

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

1 participant