2

私が望むものが可能かどうかはわかりませんが、とにかく聞いてみようと思います.

静的分析を通じて、不正なロジックが原因で未定義の動作の明確なインスタンスが発生する可能性がある警告を発行するために、clang-tidy にヒントを与えたい Boost ライブラリ コードがいくつかあります。https://akrzemi1.wordpress.com/2016/12/12/concealing-bugs/は、このようにclang-tidyがトリップする可能性があることを示唆しています__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 に答える