[libc-commits] [libc] 889dfd4 - [libc][msan] Fix "non-constexpr function '__msan_unpoison' cannot be used in a constant expression" (#88719)
via libc-commits
libc-commits at lists.llvm.org
Wed Apr 17 01:04:26 PDT 2024
Author: Guillaume Chatelet
Date: 2024-04-17T10:04:22+02:00
New Revision: 889dfd4ab35892840f2bd2d6d7fed6fac025e18e
URL: https://github.com/llvm/llvm-project/commit/889dfd4ab35892840f2bd2d6d7fed6fac025e18e
DIFF: https://github.com/llvm/llvm-project/commit/889dfd4ab35892840f2bd2d6d7fed6fac025e18e.diff
LOG: [libc][msan] Fix "non-constexpr function '__msan_unpoison' cannot be used in a constant expression" (#88719)
Prior to this patch, calling `cpp::bit_cast<T>` in `constexpr`
expressions under `-fsanitize=memory` would fail with the following
message "non-constexpr function '__msan_unpoison' cannot be used in a
constant expression".
This patch makes sure that the `__msan_unpoison` expression is guarded
by `!__builtin_is_constant_evaluated()`.
Added:
Modified:
libc/src/__support/macros/sanitizer.h
Removed:
################################################################################
diff --git a/libc/src/__support/macros/sanitizer.h b/libc/src/__support/macros/sanitizer.h
index bd9b62b7121a14..baf44f7996cabb 100644
--- a/libc/src/__support/macros/sanitizer.h
+++ b/libc/src/__support/macros/sanitizer.h
@@ -47,14 +47,13 @@
// Functions to unpoison memory
//-----------------------------------------------------------------------------
-#if defined(LIBC_HAVE_MEMORY_SANITIZER) && __has_builtin(__builtin_constant_p)
+#if defined(LIBC_HAVE_MEMORY_SANITIZER)
// Only perform MSAN unpoison in non-constexpr context.
#include <sanitizer/msan_interface.h>
#define MSAN_UNPOISON(addr, size) \
do { \
- if (!__builtin_constant_p(*addr)) { \
+ if (!__builtin_is_constant_evaluated()) \
__msan_unpoison(addr, size); \
- } \
} while (0)
#else
#define MSAN_UNPOISON(ptr, size)
More information about the libc-commits
mailing list