kees added a comment.

The kernel's [[ 
https://www.kernel.org/doc/html/latest/process/deprecated.html#implicit-switch-case-fall-through

| stance ]] on switch statements reads: |
|



  All switch/case blocks must end in one of:
  
  break;
  fallthrough;
  continue;
  goto <label>;
  return [expression];

And we've had multiple real bugs now of the "missing break before default 
return" style:

https://git.kernel.org/linus/291ddeb621e4a9f1ced8302a777fbd7fbda058c6

So, from the kernel's perspective, please don't make `-Wimplicit-fallthrough` 
more permissive -- we're finding real bugs. :)

And to speak to another example in the thread:

  // drivers/hid/usbhid/hid-core.c
   490   case -ESHUTDOWN:  /* unplug */                                         
                                                                                
                                                                             
   491     unplug = 1; 
   492   case -EILSEQ:   /* protocol error or unplug */ // 
-Wimplicit-fallthrough...how?!                                                  
                                                                                
   
   493   case -EPROTO:   /* protocol error or unplug */                         
                                                                                
                                                                             
   494   case -ECONNRESET: /* unlink */                                         
                                                                                
                                                                             
   495   case -ENOENT:                                                          
                                                                                
                                                                             
   496   case -EPIPE:    /* report not available */                             
                                                                                
                                                                             
   497     break;

I think this should warn too. While this won't turn into a "missing break" 
error, there's no way to know (from looking at code) what the _intent_ is here. 
Should it have done "return?" Why is "break" assumed to be safe here, etc?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91895/new/

https://reviews.llvm.org/D91895

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to