clang/lib/StaticAnalyzer/Checkers/MPI-Checker
George Karpenkov d245644c76 [analyzer] Do not run visitors until the fixpoint, run only once.
In the current implementation, we run visitors until the fixed point is
reached.
That is, if a visitor adds another visitor, the currently processed path
is destroyed, all diagnostics is discarded, and it is regenerated again,
until it's no longer modified.
This pattern has a few negative implications:

 - This loop does not even guarantee to terminate.
   E.g. just imagine two visitors bouncing a diagnostics around.
 - Performance-wise, e.g. for sqlite3 all visitors are being re-run at
   least 10 times for some bugs.
   We have already seen a few reports where it leads to timeouts.
 - If we want to add more computationally intense visitors, this will
   become worse.
 - From architectural standpoint, the current layout requires copying
   visitors, which is conceptually wrong, and can be annoying (e.g. no
   unique_ptr on visitors allowed).

The proposed change is a much simpler architecture: the outer loop
processes nodes upwards, and whenever the visitor is added it only
processes current nodes and above, thus guaranteeing termination.

Differential Revision: https://reviews.llvm.org/D47856

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@335666 91177308-0d34-0410-b5e6-96231b3b80d8
2018-06-26 21:12:08 +00:00
..
MPIBugReporter.cpp Migrate PathDiagnosticPiece to std::shared_ptr 2017-01-05 17:26:53 +00:00
MPIBugReporter.h [analyzer] Do not run visitors until the fixpoint, run only once. 2018-06-26 21:12:08 +00:00
MPIChecker.cpp [analyzer] Enforce super-region classes for various memory regions. 2017-04-13 09:56:07 +00:00
MPIChecker.h [analyzer] Update two comments in MPI-Checker. NFC. 2016-08-02 23:24:40 +00:00
MPIFunctionClassifier.cpp MPI-Checker: move MPIFunctionClassifier.h 2016-07-25 15:27:16 +00:00
MPITypes.h Revert test commit 2016-08-12 17:46:23 +00:00