https://gcc.gnu.org/g:26c0268ea905bd576a3696b54899f8a8dd8d329d
commit r17-4507-g26c0268ea905bd576a3696b54899f8a8dd8d329d Author: Jakub Jelinek <[email protected]> Date: Mon Sep 21 09:11:37 2026 +0200 c, c++: Fix up __has_builtin(__builtin_{bitreverse,bswap}g) Both __builtin_bitreverseg and __builtin_bswapg are magic keyword builtins resolved in the FEs, added back in June. Unfortunately I forgot to make sure __has_builtin supports those. 2026-09-21 Jakub Jelinek <[email protected]> gcc/c/ * c-decl.cc (names_builtin_p): Return 1 for RID_BUILTIN_BITREVERSEG and RID_BUILTIN_BSWAPG. gcc/cp/ * cp-objcp-common.cc (names_builtin_p): Return 1 for RID_BUILTIN_BITREVERSEG and RID_BUILTIN_BSWAPG. gcc/testsuite/ * c-c++-common/builtin-bswapg-1.c: Test __has_builtin(__builtin_bswapg). * c-c++-common/builtin-bitreverseg-1.c: Test __has_builtin(__builtin_bitreverseg). Reviewed-by: Joseph Myers <[email protected]> Reviewed-by: Jason Merrill <[email protected]> Diff: --- gcc/c/c-decl.cc | 2 ++ gcc/cp/cp-objcp-common.cc | 2 ++ gcc/testsuite/c-c++-common/builtin-bitreverseg-1.c | 4 ++++ gcc/testsuite/c-c++-common/builtin-bswapg-1.c | 4 ++++ 4 files changed, 12 insertions(+) diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index 42d35a87a179..ada5a5043af4 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -11934,6 +11934,8 @@ names_builtin_p (const char *name) switch (C_RID_CODE (id)) { case RID_BUILTIN_ASSOC_BARRIER: + case RID_BUILTIN_BITREVERSEG: + case RID_BUILTIN_BSWAPG: case RID_BUILTIN_CONVERTVECTOR: case RID_BUILTIN_HAS_ATTRIBUTE: case RID_BUILTIN_SHUFFLE: diff --git a/gcc/cp/cp-objcp-common.cc b/gcc/cp/cp-objcp-common.cc index 36b9d743afdd..0cdf35adaa77 100644 --- a/gcc/cp/cp-objcp-common.cc +++ b/gcc/cp/cp-objcp-common.cc @@ -572,6 +572,8 @@ names_builtin_p (const char *name) switch (C_RID_CODE (id)) { case RID_ADDRESSOF: + case RID_BUILTIN_BITREVERSEG: + case RID_BUILTIN_BSWAPG: case RID_BUILTIN_CONVERTVECTOR: case RID_BUILTIN_HAS_ATTRIBUTE: case RID_BUILTIN_SHUFFLE: diff --git a/gcc/testsuite/c-c++-common/builtin-bitreverseg-1.c b/gcc/testsuite/c-c++-common/builtin-bitreverseg-1.c index dec3d6d7b2ba..d84281fc0c47 100644 --- a/gcc/testsuite/c-c++-common/builtin-bitreverseg-1.c +++ b/gcc/testsuite/c-c++-common/builtin-bitreverseg-1.c @@ -2,6 +2,10 @@ /* { dg-do run { target { c || c++11 } } } */ /* { dg-options "-O2" } */ +#if !__has_builtin(__builtin_bitreverseg) +#error __builtin_bitreverseg unsupported +#endif + #if __CHAR_BIT__ == 8 #if __SIZEOF_INT__ == 4 static_assert (__builtin_bitreverseg (0x2fa889a7U) == 0xe59115f4U, ""); diff --git a/gcc/testsuite/c-c++-common/builtin-bswapg-1.c b/gcc/testsuite/c-c++-common/builtin-bswapg-1.c index 75bc0a11dc5c..d6ae57432129 100644 --- a/gcc/testsuite/c-c++-common/builtin-bswapg-1.c +++ b/gcc/testsuite/c-c++-common/builtin-bswapg-1.c @@ -2,6 +2,10 @@ /* { dg-do run { target { c || c++11 } } } */ /* { dg-options "-O2" } */ +#if !__has_builtin(__builtin_bswapg) +#error __builtin_bswapg unsupported +#endif + #if __CHAR_BIT__ == 8 #if __SIZEOF_INT__ == 4 static_assert (__builtin_bswapg (0x12345678U) == 0x78563412U, "");
