代码之家  ›  专栏  ›  技术社区  ›  Niall Douglas

整理clang以发现静态可推断的逻辑错误

  •  2
  • Niall Douglas  · 技术社区  · 7 年前

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

    我有一些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;
    }
    

    在上面的代码中,静态分析器可以清楚地看出 clang-tidy-5.0 -checks=* -header-filter=.* temp.cpp -- -std=c++17 没有任何报告。

    注意,我不需要使用 ,这正是Andrzej的C++博客所建议的。 任何

    我不想找的是一个 总是

    我先谢谢你!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Niall Douglas    7 年前

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

    有关为什么不这样做的血腥细节,请访问 https://lists.llvm.org/pipermail/cfe-dev/2017-June/054120.html

    1. 停顿问题,即不知道是否执行循环以及如何执行循环。
    2. clang tidy和其他分析器的构建是为了尽可能避免看到死代码。这与上述检查所需的恰恰相反。