diff options
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/opt/Inliners.scala | 3 | ||||
-rw-r--r-- | test/files/pos/bug3252.flags | 1 | ||||
-rw-r--r-- | test/files/pos/bug3252.scala | 15 | ||||
-rw-r--r-- | test/files/pos/bug3430.scala | 13 | ||||
-rw-r--r-- | test/files/pos/bug3431.flags | 1 |
5 files changed, 33 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala b/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala index fcbc37c876..95d94d2e6d 100644 --- a/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala +++ b/src/compiler/scala/tools/nsc/backend/opt/Inliners.scala @@ -443,6 +443,9 @@ abstract class Inliners extends SubComponent { case Some(b) => callsNonPublic = b case None => + // Avoiding crashing the compiler if there are open blocks. + if (callee.code.blocks exists (x => !x.closed)) return false + breakable { for (b <- callee.code.blocks; i <- b) i match { diff --git a/test/files/pos/bug3252.flags b/test/files/pos/bug3252.flags new file mode 100644 index 0000000000..eb4d19bcb9 --- /dev/null +++ b/test/files/pos/bug3252.flags @@ -0,0 +1 @@ +-optimise
\ No newline at end of file diff --git a/test/files/pos/bug3252.scala b/test/files/pos/bug3252.scala new file mode 100644 index 0000000000..4b8e862714 --- /dev/null +++ b/test/files/pos/bug3252.scala @@ -0,0 +1,15 @@ +class A { + def f(x : Boolean) : Thread = { + g { + x match { + case false => + B.h { } + } + } + } + + private def g[T](block : => T) = error("") +} +object B { + def h(block : => Unit) : Nothing = error("") +}
\ No newline at end of file diff --git a/test/files/pos/bug3430.scala b/test/files/pos/bug3430.scala new file mode 100644 index 0000000000..3129c6276a --- /dev/null +++ b/test/files/pos/bug3430.scala @@ -0,0 +1,13 @@ +// package com.example + +object A { + def f1(f: String => Boolean) = f("a") + + def f2(): Boolean = + f1 { s1 => + f1 { s2 => + while (true) { } + true + } + } +}
\ No newline at end of file diff --git a/test/files/pos/bug3431.flags b/test/files/pos/bug3431.flags new file mode 100644 index 0000000000..eb4d19bcb9 --- /dev/null +++ b/test/files/pos/bug3431.flags @@ -0,0 +1 @@ +-optimise
\ No newline at end of file |