我不知道我想要的是否可能,但我还是想问问它。
我有一些 Boost 库代码,我想提示 clang-tidy 发出警告,通过静态分析,由于逻辑错误,可能会发生未定义行为的明确实例。https://akrzemi1.wordpress.com/2016/12/12/concealing-bugs/建议__builtin_unreachable()
可能会像这样绊倒,但我没能做到(尽管它很好地绊倒了 UB 消毒剂) :
#include <optional>
int main()
{
std::optional<int> f;
// Spot the UB before it happens and flag it
if(!f)
{
__builtin_unreachable();
}
// Here is the UB
return *f;
}
在上面的代码中,静态分析器可以清楚地知道__builtin_unreachable()
必须调用它。我想让 clang-tidy 报告这个,但clang-tidy-5.0 -checks=* -header-filter=.* temp.cpp -- -std=c++17
什么也没报告。
注意我不需要使用__builtin_unreachable()
,这正是 Andrzej 的 C++ 博客所建议的。任何获得 clang 静态分析器或 MSVC 静态分析器或理想的 clang-tidy 的技术来推断 UB 何时必须通过静态推断明显发生并在编译时标记它是我正在寻找的。
我不寻找的是一个在静态分析期间总是触发警告的构造,而不管用例如何。我只希望仅通过静态分析时出现静态分析警告,很明显在编译时可以调用 UB 给定一些静态可推导的逻辑错误。
提前致谢!