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

Jon*_*ams 6 c++ clang address-sanitizer ubsan

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

    bool isSanitized = false;
#if defined(__has_feature)
#if __has_feature(address_sanitizer)
    isSanitized = true;
#endif
#elif defined(__SANITIZE_ADDRESS__)
    isSanitized = true;
#endif
Run Code Online (Sandbox Code Playgroud)

yug*_*ugr 2

我建议您将其作为 bug 提交到 ASan github(或 GCC bugzilla)(我们已经为 ASan 和 TSan 定义了这一点,因此为 UBSan 制作一个 bug 也是有意义的)。-fsanitize-undefined目前看来您唯一的选择是在 Makefile 中传递自定义定义。