On 03/17/2010 03:15 PM, Blue Swirl wrote:
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

That's unfortunate.  I'll revert.

Regards,

Anthony Liguori




Reply via email to