c++ - 如何确定 UBSAN 是否已使用 clang 或 gcc 编译?

标签 c++ clang ubsan address-sanitizer

我们使用以下代码来确定是否在编译时为 clang 和 gcc 指定了 -fsanitize=address。我们如何确定是否指定了 -fsanitize=undefined

    bool isSanitized = false;
#if defined(__has_feature)
#if __has_feature(address_sanitizer)
    isSanitized = true;
#endif
#elif defined(__SANITIZE_ADDRESS__)
    isSanitized = true;
#endif

最佳答案

我建议您将此作为一个错误提交给 ASan github(或 GCC bugzilla)(我们已经为 ASan 和 TSan 定义了一个,因此也可以为 UBSan 准备一个)。目前看来,您唯一的选择是在 Makefile 中将自定义定义与 -fsanitize-undefined 一起传递。

关于c++ - 如何确定 UBSAN 是否已使用 clang 或 gcc 编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39371798/

相关文章:

c++ - 为什么 -fsanitize=undefined 导致 "undefined reference to typeinfo"?

C++ UBSAN 使用派生对象产生误报

c++ - 构建 php 扩展时 undefined reference

c++ - Clang 为直觉上应该等效的表达式提供非常不同的性能

visual-studio - 如何在 Visual Studio 和 CMake 中使用 clang-tidy?

c++ - 铛。如何克服 "unknown builtin"错误消息

c++ - 当 UBSAN (-fsanitize=undefined) 发现未定义行为时触发测试失败

c++ - C++ 标准库函数和类是否包含在每个 C++ 实现中?

c++ - 使用 C++ Boost 库有哪些优势?

c++ - Assert() - 它有什么用?