GNU compiler memory sanitizer is not available

310 Views Asked by At

When I try to build my c++ project with memory sanitizer using the CMake sanitizers modules here, I get this warning:

MemorySanitizer is not available for GNU compiler.

Although when I searched on google it is stated here that GNU compiler supports memory sanitizer.

My development enviroment is WSL2 Ubuntu 20.04 and compiler version is 9.4.0.

1

There are 1 best solutions below

0
On BEST ANSWER

As stated in the comments, the GCC documentation does not document support for MemorySanitizer. There is no entry for -fsanitize=memory- but it has -fsanitize=address, -fsanitize=leak, -fsanitize=thread and several others.

The High Performance Computing wiki page you linked in you question says:

The C/C++ compilers Clang/LLVM and GCC support so-called sanitizers. These sanitizers are built into the application code and track the execution at runtime to report execution errors. There are currently four interesting sanitizers:

  • AddressSanitizer and LeakSanitizer
  • ThreadSanitizer
  • MemorySanitizer

So it looks like it is speaking in broad strokes and that those broad strokes are wrong specifically for GCC and MemorySantizer.

Cross reference: Google wiki page on MSan:

MemorySanitizer is part of LLVM trunk and has been widely available as a compile-time option in clang since version 4.0.

Page for Clang support: https://clang.llvm.org/docs/MemorySanitizer.html.

For your reference, the line of CMake code in the CMake helper modules you are using that prints that diagnostic message is here: https://github.com/arsenm/sanitizers-cmake/blob/77df84a2af66d35bec00205651cee7de6b2b2609/cmake/sanitize-helpers.cmake#L152.