2017-10-18 13 views
1

私が望むものが可能かどうかはわかりませんが、とにかく尋ねます。静的に推論可能な論理エラーを見つけ出すために仲良しになる

私は静的解析を通じて、不正なロジックのために定義されていない動作の明確なインスタンスが発生する可能性があるという警告を出すために、clang-tidyにヒントしたいBoostライブラリコードがあります。明確にすることができます上記のコードで

#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; 
} 

、静的アナライザ:https://akrzemi1.wordpress.com/2016/12/12/concealing-bugs/__builtin_unreachable()は次のようにトリップする打ち鳴らす、きちんと得るかもしれないことを示唆しているが、私は(それは非常にうまくUBの消毒剤をトリップが)それを実現するために失敗しています__builtin_unreachable()を呼び出さなければならないことを伝えてください。私はclang-tidyにこれを報告したいが、まだclang-tidy-5.0 -checks=* -header-filter=.* temp.cpp -- -std=c++17は何も報告しない。

注:__builtin_unreachable()を使用する必要はありません。これは、AndrzejのC++ Blogが提案したものです。 クラントスタティックアナライザ、MSVCスタティックアナライザ、理想的にはクラングティディーを取得して、静的な差し引きによって明らかにUBを発生させ、コンパイル時にフラグを立てなければならないことを推測する手法です。

私が探していないのは、常にがユースケースに関係なく静的解析中に警告を出す構成です。静的解析だけで静的解析の警告が表示されるようにしたいのですが、コンパイル時に静的に推論可能な論理エラーを指定するとUBを呼び出すことができます。

事前に感謝します!

答えて

0

これは、少なくとも、そしておそらく他のほとんどの静的アナライザでは、これができないことが判明しています。

https://lists.llvm.org/pipermail/cfe-dev/2017-June/054120.htmlで見つけることができない理由の血みどろの詳細が、本質的には:

  1. すなわち、ループが実行された場合、どのようにノーアイデア停止問題。
  2. デッドコードができるだけ表示されないように、clang-tidyと他のアナライザが組み込まれています。これは、上記のチェックの種類に必要なものとまったく逆です。
関連する問題