Skip to content

Commit

Permalink
pythongh-128902: Fix check for fallthrough attribute support (python#…
Browse files Browse the repository at this point in the history
…128903)

Clang versions prior to 10 (which corresponds to Apple Clang 12) do not
support the GCC extension syntax __attribute__((fallthrough)), but do
evaluate __has_attribute(fallthrough) to 1 because they support the
C++11 style syntax [[fallthrough]]. The only way to tell if the GCC
style syntax is supported is thus to check the clang version.

Ref: llvm/llvm-project@1e0affb
  • Loading branch information
jmroot authored Jan 22, 2025
1 parent 86c1a60 commit edf8033
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
9 changes: 7 additions & 2 deletions Include/pyport.h
Original file line number Diff line number Diff line change
Expand Up @@ -625,8 +625,13 @@ extern "C" {
// case 2: code; break;
// }
//
// __attribute__((fallthrough)) was introduced in GCC 7.
#if _Py__has_attribute(fallthrough)
// __attribute__((fallthrough)) was introduced in GCC 7 and Clang 10 /
// Apple Clang 12.0. Earlier Clang versions support only the C++11
// style fallthrough attribute, not the GCC extension syntax used here,
// and __has_attribute(fallthrough) evaluates to 1.
#if _Py__has_attribute(fallthrough) && (!defined(__clang__) || \
(!defined(__apple_build_version__) && __clang_major__ >= 10) || \
(defined(__apple_build_version__) && __clang_major__ >= 12))
# define _Py_FALLTHROUGH __attribute__((fallthrough))
#else
# define _Py_FALLTHROUGH do { } while (0)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix compile errors with Clang 9 and older due to lack of ``__attribute__((fallthrough))`` support.

0 comments on commit edf8033

Please sign in to comment.