2

我不知道我想要的是否可能,但我还是想问问它。

我有一些 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 给定一些静态可推导的逻辑错误。

提前致谢!

4

1 回答 1

1

所以,是的,事实证明这至少不能在 clang-tidy 中完成,可能是大多数其他静态分析器。

为什么不可以在https://lists.llvm.org/pipermail/cfe-dev/2017-June/054120.html找到血淋淋的细节,但本质上是:

  1. 停止问题,即不知道是否以及如何执行循环。
  2. clang-tidy 和其他分析器的构建是为了尽可能避免看到死代码。这与上述检查所需的完全相反。
于 2017-10-23T01:02:45.060 回答