Use C2x [[fallthrough]] when supported by LLVM/clang
requested to merge 3371-check-for-__attribute__-fallthrough-support-is-sometimes-incorrect into main
Clang added support for the gcc-style fallthrough attribute (i.e. attribute((fallthrough))) in version 10. However, __has_attribute(fallthrough) will return 1 in C mode in older versions, even though they only support the C++11 fallthrough attribute. At best, the unsupported attribute is simply ignored; at worst, it causes errors.
The C2x fallthrough attribute has the advantages of being supported in the broadest range of clang versions (added in version 9) and being easy to check for support. Use C2x [[fallthrough]] attribute if possible, and fall back to not using an attribute for clang versions that don't have it.
Courtesy of Joshua Root
Closes #3371 (closed)