[cfe-commits] [PATCH] Fixes for unintended fall-through bugs (-Wimplicit-fallthrough)

Alexander Kornienko alexfh at google.com
Sat May 26 15:30:14 PDT 2012


Hello llvm-commits, clang-commits,

I compiled llvm and clang with the recently added
-Wimplicit-fallthroughdiagnostic 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 assert(false) not followed by break;

>From the remaining ~70 locations 6 look like real bugs. I've prepared two
patches: for llvm and clang, which add break; for all these locations. I've
also removed two unnecessary fall-throughs in headers to reduce total
amount of 'unannotated fall-through' warning messages.

I can't guarantee that all these 6 locations are real bugs, but they look
very much like unintended fall-throughs.

Could you, please, review this patch?
Thanks!

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?
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:

*#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*


-- 
Best regards,
Alexander Kornienko
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120527/734eed74/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fallthrough-bugs-clang.diff
Type: application/octet-stream
Size: 1784 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120527/734eed74/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fallthrough-bugs-llvm.diff
Type: application/octet-stream
Size: 3161 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120527/734eed74/attachment-0001.obj>


More information about the cfe-commits mailing list