DMD 2.045 int main(string[] args) { //switch (0) { } // segfaults switch (0) { case 0: } //switch (0) { case 1: } // segfaults switch (0) { case 1: default: } switch (0) { default: } return 0; } --- Seems to segfault when none of the labels inside the switch are jumped to.
It doesn't actually segfault, it executes a HALT instruction. If there is no default in a switch, the compiler inserts one of the form: default: HALT The idea is that the default should not be implied as fall-through, which it does in C. D is behaving as it is designed to.
(In reply to comment #1) > It doesn't actually segfault, it executes a HALT instruction. If there is no > default in a switch, the compiler inserts one of the form: > > default: HALT > > The idea is that the default should not be implied as fall-through, which it > does in C. > > D is behaving as it is designed to. http://digitalmars.com/d/2.0/statement.html#SwitchStatement "If none of the case expressions match, and there is not a default statement, a std.switcherr.SwitchError is thrown. The reason for this is to catch the common programming error of adding a new value to an enum, but failing to account for the extra value in switch statements. This behavior is unlike C or C++." Should sync this with the docs.