diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-19 14:49:42 -0800 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2014-02-19 14:49:42 -0800 |
commit | 2ead4d6aa3de402f269252190aaa9075a990e098 (patch) | |
tree | c6f3f998b6705161464eec8a44a50fe508d1583e | |
parent | 3973f29cec9f06724941b68577908f546341c45e (diff) | |
parent | e26fd721b9d4f902be68a93836e21e05ddbda931 (diff) | |
download | scala-2ead4d6aa3de402f269252190aaa9075a990e098.tar.gz scala-2ead4d6aa3de402f269252190aaa9075a990e098.tar.bz2 scala-2ead4d6aa3de402f269252190aaa9075a990e098.zip |
Merge pull request #3560 from gkossakowski/issue/SI-8306
SI-8306: handle SWITCH nodes with just default case
-rw-r--r-- | src/compiler/scala/tools/nsc/backend/opt/ConstantOptimization.scala | 5 | ||||
-rw-r--r-- | test/files/pos/t8306.flags | 1 | ||||
-rw-r--r-- | test/files/pos/t8306.scala | 8 |
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 + } +} |