diff options
author | Miguel Garcia <miguelalfredo.garcia@epfl.ch> | 2013-08-30 12:57:51 +0200 |
---|---|---|
committer | Miguel Garcia <miguelalfredo.garcia@epfl.ch> | 2013-12-16 10:01:12 +0100 |
commit | f9cbcbdaf81800b98a6774ca1e1dffcf2875fe4e (patch) | |
tree | b4443fb7e5ecb7e0e12e16ec289baf93668d6d6a /src/compiler | |
parent | 841dbc9c8cc6d7344b680bc916abf29849622c63 (diff) | |
download | scala-f9cbcbdaf81800b98a6774ca1e1dffcf2875fe4e.tar.gz scala-f9cbcbdaf81800b98a6774ca1e1dffcf2875fe4e.tar.bz2 scala-f9cbcbdaf81800b98a6774ca1e1dffcf2875fe4e.zip |
overzealous assert in BCodeBodyBuilder rejected throw null
Diffstat (limited to 'src/compiler')
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala index af5ae97b15..c8845344e9 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BCodeBodyBuilder.scala @@ -88,7 +88,9 @@ abstract class BCodeBodyBuilder extends BCodeSkelBuilder { def genThrow(expr: Tree): BType = { val thrownKind = tpeTK(expr) - assert(exemplars.get(thrownKind).isSubtypeOf(ThrowableReference)) + // `throw null` is valid although scala.Null (as defined in src/libray-aux) isn't a subtype of Throwable. + // Similarly for scala.Nothing (again, as defined in src/libray-aux). + assert(thrownKind.isNullType || thrownKind.isNothingType || exemplars.get(thrownKind).isSubtypeOf(ThrowableReference)) genLoad(expr, thrownKind) lineNumber(expr) emit(asm.Opcodes.ATHROW) // ICode enters here into enterIgnoreMode, we'll rely instead on DCE at ClassNode level. |