On 3/17/10, Paul Brook <p...@codesourcery.com> 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