File indexing completed on 2026-05-10 08:37:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SIMPLECONSTRAINTMANAGER_H
0014 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SIMPLECONSTRAINTMANAGER_H
0015
0016 #include "clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h"
0017 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
0018
0019 namespace clang {
0020
0021 namespace ento {
0022
0023 class SimpleConstraintManager : public ConstraintManager {
0024 ExprEngine *EE;
0025 SValBuilder &SVB;
0026
0027 public:
0028 SimpleConstraintManager(ExprEngine *exprengine, SValBuilder &SB)
0029 : EE(exprengine), SVB(SB) {}
0030
0031 ~SimpleConstraintManager() override;
0032
0033
0034
0035
0036
0037 protected:
0038
0039
0040
0041
0042
0043
0044 virtual ProgramStateRef assumeSym(ProgramStateRef State, SymbolRef Sym,
0045 bool Assumption) = 0;
0046
0047
0048
0049
0050
0051 virtual ProgramStateRef assumeSymInclusiveRange(ProgramStateRef State,
0052 SymbolRef Sym,
0053 const llvm::APSInt &From,
0054 const llvm::APSInt &To,
0055 bool InRange) = 0;
0056
0057
0058
0059 virtual ProgramStateRef assumeSymUnsupported(ProgramStateRef State,
0060 SymbolRef Sym,
0061 bool Assumption) = 0;
0062
0063
0064
0065
0066
0067
0068
0069 ProgramStateRef assumeInternal(ProgramStateRef State, DefinedSVal Cond,
0070 bool Assumption) override;
0071
0072 ProgramStateRef assumeInclusiveRangeInternal(ProgramStateRef State,
0073 NonLoc Value,
0074 const llvm::APSInt &From,
0075 const llvm::APSInt &To,
0076 bool InRange) override;
0077
0078 SValBuilder &getSValBuilder() const { return SVB; }
0079 BasicValueFactory &getBasicVals() const { return SVB.getBasicValueFactory(); }
0080 SymbolManager &getSymbolManager() const { return SVB.getSymbolManager(); }
0081
0082 private:
0083 ProgramStateRef assume(ProgramStateRef State, NonLoc Cond, bool Assumption);
0084
0085 ProgramStateRef assumeAux(ProgramStateRef State, NonLoc Cond,
0086 bool Assumption);
0087 };
0088
0089 }
0090
0091 }
0092
0093 #endif