On 3/17/10, Paul Brook<address@hidden> wrote:
If something should never happen (as in this case) then an abort/assert
> > is completely appropriate. Once things get that screwed up there's no
> > right answer, and the best thing we can do is terminate immediately to
> > try and avoid further damage.
>
> This case was:
>
> switch (foo& 0x03) {
> case 0: case 1: case 2: case 3:
> default:
> }
>
> The default is unreachable. Having it there just introduces more code
> that serves no purpose. Unless someone does something totally foolish
> and changes the mask in the switch statement, there's no way it will
> ever be reachable.
I mistakenly remembered this was using a symbolic mask rather than a literal
0x03. In that case I'd argue it's much easier to make the dumb error you
describe, and the assert can be a handy cluebat.
I guess it's largely personal preference - I prefer to add the default case to
make it clear that falling through is never gong to be the right answer.
This breaks build (gcc 4.3.2):
CC usb-linux.o
cc1: warnings being treated as errors
/src/qemu/usb-linux.c: In function 'usb_linux_update_endp_table':
/src/qemu/usb-linux.c:759: error: 'type' may be used uninitialized in
this function