Hello llvm-commits, clang-commits,<div><br></div><div>I compiled llvm and clang with the recently added <font face="courier new, monospace">-Wimplicit-fallthrough</font> diagnostic and analyzed the results. For those who are curious: there are about 400 'unannotated fall-through' warnings in total, about 290 fall-through locations are annotated in comments, about 30 locations fall-through to an empty block (case 1: ....<no break>  case 2: break;), 7 locations have <font face="courier new, monospace">assert(false)</font> not followed by <font face="courier new, monospace">break;</font></div>
<div><div><br></div><div>From the remaining ~70 locations 6 look like real bugs. I've prepared two patches: for llvm and clang, which add <font face="courier new, monospace">break;</font> for all these locations. I've also removed two unnecessary fall-throughs in headers to reduce total amount of 'unannotated fall-through' warning messages. </div>
<div><br></div><div>I can't guarantee that all these 6 locations are real bugs, but they look very much like unintended fall-throughs.</div><div><br></div><div>Could you, please, review this patch?</div><div>Thanks!</div>
<div><br></div><div>P.S. It would also be interesting to know what people think about converting fall-through annotations in comments to a checked annotation so we could use this diagnostic on regular basis?</div><div>We could wrap [[clang::fallthrough]] to a macro, so the code would continue to work in c++98 mode, but in c++11 mode it would also allow to run this diagnostic (btw, is llvm compilable in c++11 mode?). Sample implementation of macro:</div>
<div><pre><b>#ifdef __clang__
#if __has_feature(cxx_attributes) && __has_warning("-Wimplicit-fallthrough")
#define FALLTHROUGH [[clang::fallthrough]]
#endif
#endif

#ifndef FALLTHROUGH
#define FALLTHROUGH do { } while (0)
#endif</b></pre></div><div><br></div>-- <br>
<div>Best regards,</div><div>Alexander Kornienko</div></div>