summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorMiguel Garcia <miguelalfredo.garcia@epfl.ch>2013-08-30 12:57:51 +0200
committerMiguel Garcia <miguelalfredo.garcia@epfl.ch>2013-12-16 10:01:12 +0100
commitf9cbcbdaf81800b98a6774ca1e1dffcf2875fe4e (patch)
treeb4443fb7e5ecb7e0e12e16ec289baf93668d6d6a /src/compiler
parent841dbc9c8cc6d7344b680bc916abf29849622c63 (diff)
downloadscala-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.scala4
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.