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
fallthrough-bugs-clang.diff
Description: Binary data
fallthrough-bugs-llvm.diff
Description: Binary data
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
