[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