43 #if defined(__GNUC__) && defined (__SIZEOF_INT128__)
48 #pragma message(__FILE__ "(" _CRT_STRINGIZE(__LINE__) ")" ": warning: TODO No 128-bit integer type is available => Limited analysis of large integers...")
50 #warning TODO No 128-bit integer type is available => Limited analysis of large integers
84 virtual bool isC()
const = 0;
89 const std::string &text,
92 bool incomplete=
false,
93 const std::string &functionName = std::string()) = 0;
184 typedef std::vector<std::pair<ValuePtr,ValuePtr>>
Vector;
202 std::string
getRange()
const override;
217 std::vector<IndexAndValue>
data;
226 return "\"" +
string +
"\"";
230 return string.size();
251 for (
auto memberNameValue:
member) {
252 if (memberNameValue.second && memberNameValue.second->isUninit(dataBase))
253 return memberNameValue.first;
255 return std::string();
269 return "&@" + std::to_string(
varId);
295 std::string name1 =
op1 ?
op1->name : std::string(
"null");
296 std::string name2 =
op2 ?
op2->name : std::string(
"null");
297 return "(" + name1 +
")" +
binop +
"(" + name2 +
")";
This is an interface, which the class responsible of error logging should implement.
AddressOfValue(const std::string &name, int varId)
std::string getRange() const override
std::string getSymbolicExpression() const override
std::vector< IndexAndValue > data
std::vector< ValuePtr > size
ArrayValue(const std::string &name, ValuePtr size, ValuePtr value, bool pointer, bool nullPointer, bool uninitPointer)
void assign(ValuePtr index, ValuePtr value)
ConditionalValue::Vector read(ValuePtr index) const
std::string getRange() const override
bool isUninit(const DataBase *dataBase) const override
bool isEqual(const DataBase *, int) const override
bool isTrue(const DataBase *dataBase) const
static std::string getName(const std::string &binop, ValuePtr op1, ValuePtr op2)
BinOpResult(const std::string &binop, ValuePtr op1, ValuePtr op2)
virtual bool isLessThan(const DataBase *dataBase, int value) const override
bool isGreaterThan(const DataBase *dataBase, int value) const override
bool isEqual(const DataBase *dataBase, int value) const override
std::string getExpr(DataBase *dataBase) const
std::string getSymbolicExpression() const override
std::vector< std::pair< ValuePtr, ValuePtr > > Vector
ConditionalValue(const std::string &name, const Vector &values)
virtual void reportError(const Token *tok, Severity::SeverityType severity, const char id[], const std::string &text, CWE cwe, bool inconclusive, bool incomplete=false, const std::string &functionName=std::string())=0
virtual bool isC() const =0
virtual bool isCPP() const =0
DataBase(const std::string ¤tFunction, const Settings *settings)
const std::string currentFunction
virtual std::string getNewSymbolName()=0
const Settings *const settings
bool isEqual(const DataBase *dataBase, int value) const override
std::string getRange() const override
bool isGreaterThan(const DataBase *dataBase, int value) const override
bool isLessThan(const DataBase *dataBase, int value) const override
FloatRange(const std::string &name, long double minValue, long double maxValue)
FunctionCallArgumentValues(const std::vector< ExprEngine::ValuePtr > &argValues)
const std::vector< ExprEngine::ValuePtr > argValues
bool isLessThan(const DataBase *dataBase, int value) const override
IntRange(const std::string &name, int128_t minValue, int128_t maxValue)
bool isGreaterThan(const DataBase *dataBase, int value) const override
bool isEqual(const DataBase *dataBase, int value) const override
std::string getRange() const override
IntegerTruncation(const std::string &name, ValuePtr inputValue, int bits, char sign)
std::string getSymbolicExpression() const override
ExprEngine::ValuePtr inputValue
std::string getRange() const override
StringLiteralValue(const std::string &name, const std::string &s)
std::map< std::string, ValuePtr > member
std::string getUninitStructMember(const DataBase *dataBase) const
std::string getSymbolicExpression() const override
ValuePtr getValueOfMember(const std::string &n) const
StructValue(const std::string &name)
std::string getRange() const override
bool isUninit(const DataBase *dataBase) const override
bool isEqual(const DataBase *dataBase, int value) const override
virtual std::string getRange() const
virtual bool isGreaterThan(const DataBase *dataBase, int value) const
Value(const std::string &name, const ValueType type)
virtual std::string getSymbolicExpression() const
virtual bool isEqual(const DataBase *dataBase, int value) const
virtual bool isUninit(const DataBase *dataBase) const
virtual bool isLessThan(const DataBase *dataBase, int value) const
This is just a container for general settings so that we don't need to pass individual values to func...
SeverityType
Message severities.
The token list that the TokenList generates is a linked-list of this class.
The main purpose is to tokenize the source code.
Information about a member variable.
std::list< ErrorPathItem > ErrorPath
void executeFunction(const Scope *functionScope, ErrorLogger *errorLogger, const Tokenizer *tokenizer, const Settings *settings, const std::vector< Callback > &callbacks, std::ostream &report)
void runChecks(ErrorLogger *errorLogger, const Tokenizer *tokenizer, const Settings *settings)
std::shared_ptr< Value > ValuePtr
@ FunctionCallArgumentValues
void CPPCHECKLIB executeAllFunctions(ErrorLogger *errorLogger, const Tokenizer *tokenizer, const Settings *settings, const std::vector< Callback > &callbacks, std::ostream &report)
Execute all functions.
void dump(ExprEngine::ValuePtr val)
std::function< void(const Token *, const ExprEngine::Value &, ExprEngine::DataBase *)> Callback
std::string str(int128_t)