Как определить, когда используется -fsanitize=memory?

Я хочу очистить ложный положительный результат на FD_ZERO а также FD_SET когда дезинфицирующее средство памяти используется. Очистить его довольно просто:

#include <sanitizer/msan_interface.h>
...

__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));

Тем не менее, я не знаю, как определить, когда дезинфицирующее средство памяти используется. То есть обнаружить, когда -fsanitize=memory был указан в командной строке. Препроцессор, похоже, не помогает:

$ clang -dM -E -fsanitize=memory - </dev/null | egrep -i 'memory|sanitize|msan'
$

Как я могу определить, когда -fsanitize=memory используется?

1 ответ

Решение

По словам Константина Серебряного из списка рассылки Memory Sanitizer, макрос препроцессора отсутствует. __Has_feature(memory_sanitizer) следует использовать:

#if defined(__has_feature)
#  if __has_feature(memory_sanitizer)
#    define MEMORY_SANITIZER 1
#  endif
#endif
...

#ifdef MEMORY_SANITIZER
#  include <sanitizer/msan_interface.h>
#endif
...

#ifdef MEMORY_SANITIZER
__msan_unpoison(&readfds, sizeof(readfds));
__msan_unpoison(&writefds, sizeof(writefds));
#endif
...
Другие вопросы по тегам