Skip to content

compiler crash in GenBCode referring to a class that extends an annotation #9393

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

Closed
scabug opened this issue Jul 12, 2015 · 5 comments
Closed
Assignees
Labels
Milestone

Comments

@scabug
Copy link

scabug commented Jul 12, 2015

tail  sandbox/{Named,NamedImpl}.java sandbox/test.scala
==> sandbox/Named.java <==
package bug;

public @interface Named {}

==> sandbox/NamedImpl.java <==
import bug.Named;
import java.io.Serializable;
import java.lang.annotation.Annotation;

public class NamedImpl implements Named {

    public Class<? extends Annotation> annotationType() {
        return null;
    }
}

==> sandbox/test.scala <==
class C {
  new bug.NamedImpl
}
ticket/9387 /code/scala javac -d . sandbox/Named.java sandbox/NamedImpl.java && qscalac sandbox/test.scala
java.lang.AssertionError: assertion failed: Invalid interfaces in Lbug/NamedImpl;: List(Lbug/Named;)
	at scala.Predef$.assert(Predef.scala:165)
	at scala.tools.nsc.backend.jvm.BTypes$ClassBType.checkInfoConsistency(BTypes.scala:850)
	at scala.tools.nsc.backend.jvm.BTypes$ClassBType.info_$eq(BTypes.scala:827)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols.scala$tools$nsc$backend$jvm$BTypesFromSymbols$$setClassInfo(BTypesFromSymbols.scala:344)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols$$anonfun$classBTypeFromSymbol$4.apply(BTypesFromSymbols.scala:120)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols$$anonfun$classBTypeFromSymbol$4.apply(BTypesFromSymbols.scala:112)
	at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
	at scala.collection.concurrent.TrieMap.getOrElse(TrieMap.scala:633)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols.classBTypeFromSymbol(BTypesFromSymbols.scala:112)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols$$anonfun$primitiveOrClassToBType$1$2.apply(BTypesFromSymbols.scala:153)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols$$anonfun$primitiveOrClassToBType$1$2.apply(BTypesFromSymbols.scala:153)
	at scala.collection.MapLike$class.getOrElse(MapLike.scala:128)
	at scala.collection.AbstractMap.getOrElse(Map.scala:59)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols.primitiveOrClassToBType$1(BTypesFromSymbols.scala:153)
	at scala.tools.nsc.backend.jvm.BTypesFromSymbols.typeToBType(BTypesFromSymbols.scala:168)
	at scala.tools.nsc.backend.jvm.BCodeHelpers$BCInnerClassGen$class.toTypeKind(BCodeHelpers.scala:355)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.toTypeKind(BCodeSkelBuilder.scala:50)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.tpeTK(BCodeSkelBuilder.scala:85)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genApply(BCodeBodyBuilder.scala:599)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoad(BCodeBodyBuilder.scala:312)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genStat(BCodeBodyBuilder.scala:89)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genBlock$1.apply(BCodeBodyBuilder.scala:809)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder$$anonfun$genBlock$1.apply(BCodeBodyBuilder.scala:809)
	at scala.collection.immutable.List.foreach(List.scala:381)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genBlock(BCodeBodyBuilder.scala:809)
	at scala.tools.nsc.backend.jvm.BCodeBodyBuilder$PlainBodyBuilder.genLoad(BCodeBodyBuilder.scala:373)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.emitNormalMethodBody$1(BCodeSkelBuilder.scala:621)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genDefDef(BCodeSkelBuilder.scala:655)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:525)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder$$anonfun$gen$1.apply(BCodeSkelBuilder.scala:527)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder$$anonfun$gen$1.apply(BCodeSkelBuilder.scala:527)
	at scala.collection.immutable.List.foreach(List.scala:381)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.gen(BCodeSkelBuilder.scala:527)
	at scala.tools.nsc.backend.jvm.BCodeSkelBuilder$PlainSkelBuilder.genPlainClass(BCodeSkelBuilder.scala:125)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker1.visit(GenBCode.scala:183)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker1$$anonfun$run$1.apply$mcV$sp(GenBCode.scala:137)
	at scala.tools.nsc.Global$GlobalPhase.withCurrentUnit(Global.scala:431)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase$Worker1.run(GenBCode.scala:137)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.buildAndSendToDisk(GenBCode.scala:355)
	at scala.tools.nsc.backend.jvm.GenBCode$BCodePhase.run(GenBCode.scala:324)
	at scala.tools.nsc.Global$Run.compileUnitsInternal(Global.scala:1504)
	at scala.tools.nsc.Global$Run.compileUnits(Global.scala:1489)
	at scala.tools.nsc.Global$Run.compileSources(Global.scala:1484)
	at scala.tools.nsc.Global$Run.compile(Global.scala:1585)
	at scala.tools.nsc.Driver.doCompile(Driver.scala:35)
	at scala.tools.nsc.MainClass.doCompile(Main.scala:24)
	at scala.tools.nsc.Driver.process(Driver.scala:55)
	at scala.tools.nsc.Driver.main(Driver.scala:68)
	at scala.tools.nsc.Main.main(Main.scala)
error: Error while emitting test.scala
assertion failed: Invalid interfaces in Lbug/NamedImpl;: List(Lbug/Named;)
one error found

As seen in the community build: https://typesafe.slack.com/files/adriaan/F07FZV3PT/genbcode_crasher_in_play-core__community_build_.sh

/cc @adriaanm @SethTisue @lrytz

@scabug
Copy link
Author

scabug commented Jul 12, 2015

Imported From: https://issues.scala-lang.org/browse/SI-9393?orig=1
Reporter: @retronym
Affected Versions: 2.12.0-M1

@scabug
Copy link
Author

scabug commented Jul 12, 2015

@retronym said:
Disabling the assertions as the first step: scala/scala#4621

@scabug
Copy link
Author

scabug commented Jul 13, 2015

@retronym said:
We're going to recut 2.12.0-M2 with the assertions disabled.

@scabug
Copy link
Author

scabug commented Jul 15, 2015

@lrytz said:
The problem here is that the Scala classfile parser doesn't use the real classfile flags for java annotations, but makes them look like scala classes: https://github.com/scala/scala/blob/2.11.x/src/reflect/scala/reflect/internal/ClassfileConstants.scala#L345

In reality, a classfile for a java annotation has the flags ACC_ANNOTATION, ACC_ABSTRACT and ACC_INTERFACE. They are all skipped when creating the symbol.

We also have to see what the java source parser does to java annotations in terms of flags.

@scabug
Copy link
Author

scabug commented Jul 15, 2015

@lrytz said (edited on Jan 4, 2016 1:03:37 PM UTC):
scala/scala#4638

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

No branches or pull requests

2 participants