<p><span style="font-family:Arial, sans-serif;font-size:14px;">The following are bugs or suggested improvements to the checking of TableSwitch instructions:</span></p><p> </p><p>cases can be empty (if all targets are the default label)<br>which results in low > high.<br>```<br>***** SWITCH24-25\CodeBuilder.java<br>2428:          }<br>2429:          return tableswitch(low, high, defaultTarget, cases);<br>***** SWITCH_MODS\CODEBUILDER.JAVA<br>2428:          }<br>2429:          if (cases.isEmpty()) {<br>2430:              low = high = 0;<br>2431:          }<br>2432:          return tableswitch(low, high, defaultTarget, cases);<br>*****<br>```</p><p>low = Integer.MIN_VALUE, high = Integer.MAX_VALUE is too large a range.<br>Integer.MAX_VALUE - Integer.MIN_VALUE + 1 == 0<br>```<br>***** SWITCH24-25\StackCounter.java<br> 278:                              keys = high - low + 1;<br> 279:                              if (keys < 0) {<br> 280:                                  throw error("too many keys in tableswitch");<br>***** SWITCH_MODS\STACKCOUNTER.JAVA<br> 278:                              keys = high - low + 1;<br> 279:                              if (keys <= 0) {<br> 280:                                  throw error("too many keys in tableswitch");<br>*****<br>```</p><p>do same checks on UnboundInstruction as BoundInstruction?<br>```<br>***** SWITCH24-25\AbstractInstruction.java<br> 935:              this.highValue = highValue;<br> 936:              this.defaultTarget = requireNonNull(defaultTarget);<br>***** SWITCH_MODS\ABSTRACTINSTRUCTION.JAVA<br> 935:              this.highValue = highValue;<br> 936:              if (highValue < lowValue || (long)highValue - lowValue > (65535 - 4) >> 2 {<br> 937:                  throw new IllegalArgumentException("Invalid tableswitch values low: " + low + " high: " + high);<br> 938:              }<br> 939:              this.defaultTarget = requireNonNull(defaultTarget);<br>*****<br>```</p><p>check cases in range [low,high] and no duplicates (which can occur via UnboundInstruction)<br>```<br>***** SWITCH24-25\DirectCodeBuilder.java<br> 641:          for (var c : cases) {<br> 642:              caseMap.put(c.caseValue(), c.target());<br> 643:          }<br>***** SWITCH_MODS\DIRECTCODEBUILDER.JAVA<br> 641:          for (var c : cases) {<br> 642:              int cv = c.caseValue();<br> 643:              if (cv < low || cv > high) {<br> 644:                  throw new IllegalArgumentException(String.format("Case value %d is not in [low=%d,high=%d]", cv, low,high));<br> 645:              }<br> 646:              var previous = caseMap.put(cv, c.target());<br> 647:              if (previous != null) {<br> 648:                  throw new IllegalArgumentException(String.format("Duplicate case value %d", cv);<br> 649:              }<br> 650:          }<br>*****<br>```</p><p> </p>