[PATCH 2/2] secmem: use nested #if for __has_feature test
Jussi Kivilinna <[email protected]> Thu, 23 Jul 2026 14:32:04 +0300
| Newsgroups | gmane.comp.encryption.gpg.libgcrypt.devel |
|---|---|
| Message-ID | <[email protected]> |
* src/secmem.c (lock_pool_pages): Test __has_feature with a nested #if instead of a single combined expression. -- GCC documents nested #if as portable form for the __has_* operators, and flags combined defined(X) && X(...) as valid only where operator is supported. GCC and clang both provide __has_feature, so nothing is broken in practice, but use documented form. Select no-mlock path through a macro so nested test keeps its else branch. Signed-off-by: Jussi Kivilinna <[email protected]> --- src/secmem.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/secmem.c b/src/secmem.c index 7c5cac76..67fef0e6 100644 --- a/src/secmem.c +++ b/src/secmem.c @@ -296,7 +296,12 @@ lock_pool_pages (void *p, size_t n) uid = getuid (); #ifdef HAVE_BROKEN_MLOCK -#if defined(__has_feature) && __has_feature(address_sanitizer) +#if defined __has_feature +# if __has_feature (address_sanitizer) +# define GCRY_ASAN_NO_MLOCK 1 +# endif +#endif +#ifdef GCRY_ASAN_NO_MLOCK /* Address sanitizer and mlock is incompatible. We can't use mlock * with address sanitizer enabled. Proceed with NO_MLOCK=1. */ (void)p; -- 2.53.0