summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala5
-rw-r--r--test/files/pos/t8306.flags1
-rw-r--r--test/files/pos/t8306.scala8
3 files changed, 13 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala b/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala
index 64a0727440..1fadcb8920 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala
@@ -492,7 +492,10 @@ abstract class ConstantOptimization extends SubComponent {
case SWITCH(tags, labels) =>
val in1 = in peek 0
val reachableNormalLabels = tags zip labels collect { case (tagSet, label) if canSwitch(in1, tagSet) => label }
- val reachableLabels = if (labels.lengthCompare(tags.length) > 0) {
+ val reachableLabels = if (tags.isEmpty) {
+ assert(labels.size == 1, s"When SWITCH node has empty array of tags it should have just one (default) label: $labels")
+ labels
+ } else if (labels.lengthCompare(tags.length) > 0) {
// if we've got an extra label then it's the default
val defaultLabel = labels.last
// see if the default is reachable by seeing if the input might be out of the set
diff --git a/test/files/pos/t8306.flags b/test/files/pos/t8306.flags
new file mode 100644
index 0000000000..49d036a887
--- /dev/null
+++ b/test/files/pos/t8306.flags
@@ -0,0 +1 @@
+-optimize
diff --git a/test/files/pos/t8306.scala b/test/files/pos/t8306.scala
new file mode 100644
index 0000000000..e04b054eb9
--- /dev/null
+++ b/test/files/pos/t8306.scala
@@ -0,0 +1,8 @@
+class Si8306 {
+ def foo: Int = 123
+ lazy val extension: Int =
+ foo match {
+ case idx if idx != -1 => 15
+ case _ => 17
+ }
+}