On 5/14/2020 7:22 PM, Manoj Palat wrote:
I think there is a spec omission regarding "complete normally for switch 
statements whose switch block consists of switch rules

Ref JLS 14 Sec 14.22
...
A switch statement whose switch block consists of switch rules can complete
normally iff at least one of the following is true:
– One of the switch rules introduces a switch rule expression (which is
necessarily a statement expression).
– One of the switch rules introduces a switch rule block that can complete
normally.
– One of the switch rules introduces a switch rule block that contains a 
reachable
break statement which exits the switch statement.
...
Now consider:

switch (b) {
case 1 -> {
throw new Exception();
}
}

As per the above definition, this switch statement cannot complete normally;
but consider "b" having a value other than 1 and then it completes normally.

/* -----
To demonstrate the point, the switch statement above uses a switch rule block that completes abruptly, but could alternatively have used a switch rule `throw` statement:

switch (b) {
  case 1 -> throw new Exception();
}

Also, to clarify for the many readers of this list, we are discussing switch statements, which never require a `default` label. We are not discussing switch expressions, which almost always require a `default` label.
----- */


Also consider, 14.11.3. which says:
"If no switch label matches, the entire switch statement completes normally."

which looks inconsistent. One hand says: "completes normally" the other:
"iff at least one of the following ..." not mentioning default.

Hence, shouldn't the item,
-> – The switch block does not contain a default label.

also be added in the list in 14.22?

I agree that without a `default` switch label, 14.11.3 may evaluate "If no switch label matches, the entire switch statement completes normally." Since we can see a way for the statement to complete normally, 14.22 ought to say that the statement _can_ complete normally. So, it looks right to add "– The switch block does not contain a default label."

Alex

Reply via email to