38#ifndef SECP256K1_CHECKMEM_H
39#define SECP256K1_CHECKMEM_H
42#define SECP256K1_CHECKMEM_NOOP(p, len) do { (void)(p); (void)(len); } while(0)
47#if defined(__has_feature)
48# if __has_feature(memory_sanitizer)
49# include <sanitizer/msan_interface.h>
50# define SECP256K1_CHECKMEM_ENABLED 1
51# if defined(__clang__) && ((__clang_major__ == 21 && __clang_minor__ >= 1) || __clang_major__ >= 22)
52# define SECP256K1_CHECKMEM_UNDEFINE(p, len) do { \
54 _Pragma("clang diagnostic push") \
55 _Pragma("clang diagnostic ignored \"-Wuninitialized-const-pointer\"") \
56 __msan_allocated_memory((p), (len)); \
57 _Pragma("clang diagnostic pop") \
60# define SECP256K1_CHECKMEM_UNDEFINE(p, len) __msan_allocated_memory((p), (len))
62# define SECP256K1_CHECKMEM_DEFINE(p, len) __msan_unpoison((p), (len))
63# define SECP256K1_CHECKMEM_MSAN_DEFINE(p, len) __msan_unpoison((p), (len))
64# define SECP256K1_CHECKMEM_CHECK(p, len) __msan_check_mem_is_initialized((p), (len))
65# define SECP256K1_CHECKMEM_RUNNING() (1)
69#if !defined SECP256K1_CHECKMEM_MSAN_DEFINE
70# define SECP256K1_CHECKMEM_MSAN_DEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
75#if !defined SECP256K1_CHECKMEM_ENABLED
78# if defined(__clang__) && defined(__APPLE__)
79# pragma clang diagnostic push
80# pragma clang diagnostic ignored "-Wreserved-identifier"
81# elif defined(__GNUC__) && (__GNUC__ >= 15)
82# pragma GCC diagnostic push
83# pragma GCC diagnostic ignored "-Wtrailing-whitespace"
85# include <valgrind/memcheck.h>
86# if defined(__clang__) && defined(__APPLE__)
87# pragma clang diagnostic pop
88# elif defined(__GNUC__) && (__GNUC__ >= 15)
89# pragma GCC diagnostic pop
91# define SECP256K1_CHECKMEM_ENABLED 1
92# define SECP256K1_CHECKMEM_UNDEFINE(p, len) VALGRIND_MAKE_MEM_UNDEFINED((p), (len))
93# define SECP256K1_CHECKMEM_DEFINE(p, len) VALGRIND_MAKE_MEM_DEFINED((p), (len))
94# define SECP256K1_CHECKMEM_CHECK(p, len) VALGRIND_CHECK_MEM_IS_DEFINED((p), (len))
98# define SECP256K1_CHECKMEM_RUNNING() (VALGRIND_MAKE_MEM_DEFINED(NULL, 0) != 0)
103#if !defined SECP256K1_CHECKMEM_ENABLED
104# define SECP256K1_CHECKMEM_ENABLED 0
105# define SECP256K1_CHECKMEM_UNDEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
106# define SECP256K1_CHECKMEM_DEFINE(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
107# define SECP256K1_CHECKMEM_CHECK(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))
108# define SECP256K1_CHECKMEM_RUNNING() (0)
112#define SECP256K1_CHECKMEM_CHECK_VERIFY(p, len) SECP256K1_CHECKMEM_CHECK((p), (len))
114#define SECP256K1_CHECKMEM_CHECK_VERIFY(p, len) SECP256K1_CHECKMEM_NOOP((p), (len))