diff --git a/clang/include/clang/Analysis/FlowSensitive/Diagnosis.h b/clang/include/clang/Analysis/FlowSensitive/Diagnosis.h --- a/clang/include/clang/Analysis/FlowSensitive/Diagnosis.h +++ b/clang/include/clang/Analysis/FlowSensitive/Diagnosis.h @@ -18,14 +18,22 @@ #include "clang/Analysis/FlowSensitive/DataflowEnvironment.h" #include "clang/Analysis/FlowSensitive/TypeErasedDataflowAnalysis.h" #include "llvm/ADT/DenseSet.h" +#include "llvm/ADT/Optional.h" +#include <functional> +#include <utility> +#include <vector> namespace clang { namespace dataflow { +/// Looks at a single statement using the `Lattice` and `Environment` at that +/// program point from running a dataflow analysis, and returns any diagnostics. template <typename Lattice, typename Diags> using Diagnosis = std::function<Diags(const Stmt *, const Lattice &, const Environment &)>; +/// Collects diagnostics from all blocks in a CFG, given some dataflow analysis +/// results and a `Diagnose` function which can be run on individual statements. template <typename Lattice, typename Diag> llvm::DenseSet<Diag> diagnoseCFG( const ControlFlowContext &CFCtx,