From 82810edfb0c060340a0c07641ec548299526dcc8 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 17 Feb 2021 18:36:54 -0600 Subject: [PATCH 01/22] Fix issue 9979: false positive: containerOutOfBounds with conditional resize --- lib/programmemory.cpp | 42 ++++++--- lib/valueflow.cpp | 194 +++++++++++++++++++++++++++++++---------- lib/valueflow.h | 3 + test/testcondition.cpp | 2 +- test/teststl.cpp | 8 ++ 5 files changed, 188 insertions(+), 61 deletions(-) diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 440dd223367..722942a6365 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -4,6 +4,7 @@ #include "mathlib.h" #include "symboldatabase.h" #include "token.h" +#include "valueflow.h" #include #include #include @@ -424,20 +425,33 @@ void execute(const Token *expr, else if (expr->isComparisonOp()) { MathLib::bigint result1(0), result2(0); - execute(expr->astOperand1(), programMemory, &result1, error); - execute(expr->astOperand2(), programMemory, &result2, error); - if (expr->str() == "<") - *result = result1 < result2; - else if (expr->str() == "<=") - *result = result1 <= result2; - else if (expr->str() == ">") - *result = result1 > result2; - else if (expr->str() == ">=") - *result = result1 >= result2; - else if (expr->str() == "==") - *result = result1 == result2; - else if (expr->str() == "!=") - *result = result1 != result2; + bool error1, error2; + execute(expr->astOperand1(), programMemory, &result1, &error1); + execute(expr->astOperand2(), programMemory, &result2, &error2); + if (error1 && error2) { + *error = true; + } else if (error1 && !error2) { + ValueFlow::Value v = inferCondition(expr->str(), expr->astOperand1(), result2); + *error = !v.isKnown(); + *result = v.intvalue; + } else if (!error1 && error2) { + ValueFlow::Value v = inferCondition(expr->str(), result1, expr->astOperand2()); + *error = !v.isKnown(); + *result = v.intvalue; + } else { + if (expr->str() == "<") + *result = result1 < result2; + else if (expr->str() == "<=") + *result = result1 <= result2; + else if (expr->str() == ">") + *result = result1 > result2; + else if (expr->str() == ">=") + *result = result1 >= result2; + else if (expr->str() == "==") + *result = result1 == result2; + else if (expr->str() == "!=") + *result = result1 != result2; + } } else if (expr->isAssignmentOp()) { diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index e97f1895aa0..e39166ef31d 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -4692,6 +4692,93 @@ static const ValueFlow::Value* proveNotEqual(const std::list& return result; } +static std::vector minUnsignedValue(const Token* tok, int depth = 8) +{ + std::vector result = {}; + if (!tok) + return result; + if (depth < 0) + return result; + if (tok->hasKnownIntValue()) { + result = {tok->values().front().intvalue}; + } else if (tok->isConstOp() && tok->astOperand1() && tok->astOperand2()) { + std::vector op1 = minUnsignedValue(tok->astOperand1(), depth - 1); + std::vector op2 = minUnsignedValue(tok->astOperand2(), depth - 1); + if (!op1.empty() && !op1.empty()) + result = {calculate(tok->str(), op1.front(), op2.front())}; + } + if (result.empty() && tok->valueType() && tok->valueType()->sign == ValueType::UNSIGNED) + result = {0}; + return result; +} + +ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val) +{ + if (!varTok) + return ValueFlow::Value{}; + if (varTok->hasKnownIntValue()) + return ValueFlow::Value{}; + if (std::none_of(varTok->values().begin(), varTok->values().end(), [](const ValueFlow::Value& v) { + return v.isImpossible() && v.valueType == ValueFlow::Value::ValueType::INT; + })) { + if (varTok->valueType() && varTok->valueType()->sign == ValueType::UNSIGNED && (op == ">" || op == ">=")) { + std::vector minvalue = minUnsignedValue(varTok); + if (minvalue.empty()) + return ValueFlow::Value{}; + bool isTrue = calculate(op, std::max(0, minvalue.front()), val); + if (!isTrue) + return ValueFlow::Value{}; + ValueFlow::Value value; + value.intvalue = 1; + value.bound = ValueFlow::Value::Bound::Point; + value.setKnown(); + return value; + } + return ValueFlow::Value{}; + } + const ValueFlow::Value* result = nullptr; + bool known = false; + if (op == "==" || op == "!=") { + result = proveNotEqual(varTok->values(), val); + known = op == "!="; + } else if (op == "<" || op == ">=") { + result = proveLessThan(varTok->values(), val); + known = op == "<"; + if (!result && !isSaturated(val)) { + result = proveGreaterThan(varTok->values(), val - 1); + known = op == ">="; + } + } else if (op == ">" || op == "<=") { + result = proveGreaterThan(varTok->values(), val); + known = op == ">"; + if (!result && !isSaturated(val)) { + result = proveLessThan(varTok->values(), val + 1); + known = op == "<="; + } + } + if (!result) + return ValueFlow::Value{}; + ValueFlow::Value value = *result; + value.intvalue = known; + value.bound = ValueFlow::Value::Bound::Point; + value.setKnown(); + return value; +} + +ValueFlow::Value inferCondition(std::string op, MathLib::bigint val, const Token* varTok) +{ + // Flip the operator + if (op == ">") + op = "<"; + else if (op == "<") + op = ">"; + else if (op == ">=") + op = "<="; + else if (op == "<=") + op = ">="; + return inferCondition(op, varTok, val); +} + static void valueFlowInferCondition(TokenList* tokenlist, const Settings* settings) { @@ -4711,57 +4798,72 @@ static void valueFlowInferCondition(TokenList* tokenlist, value.setKnown(); setTokenValue(tok, value, settings); } else if (tok->isComparisonOp()) { - MathLib::bigint val = 0; - const Token* varTok = nullptr; + ValueFlow::Value value{}; std::string op = tok->str(); if (tok->astOperand1()->hasKnownIntValue()) { - val = tok->astOperand1()->values().front().intvalue; - varTok = tok->astOperand2(); - // Flip the operator - if (op == ">") - op = "<"; - else if (op == "<") - op = ">"; - else if (op == ">=") - op = "<="; - else if (op == "<=") - op = ">="; + MathLib::bigint val = tok->astOperand1()->values().front().intvalue; + const Token* varTok = tok->astOperand2(); + value = inferCondition(tok->str(), val, varTok); } else if (tok->astOperand2()->hasKnownIntValue()) { - val = tok->astOperand2()->values().front().intvalue; - varTok = tok->astOperand1(); + MathLib::bigint val = tok->astOperand2()->values().front().intvalue; + const Token* varTok = tok->astOperand1(); + value = inferCondition(tok->str(), varTok, val); } - if (!varTok) - continue; - if (varTok->hasKnownIntValue()) - continue; - if (varTok->values().empty()) - continue; - const ValueFlow::Value* result = nullptr; - bool known = false; - if (op == "==" || op == "!=") { - result = proveNotEqual(varTok->values(), val); - known = op == "!="; - } else if (op == "<" || op == ">=") { - result = proveLessThan(varTok->values(), val); - known = op == "<"; - if (!result && !isSaturated(val)) { - result = proveGreaterThan(varTok->values(), val - 1); - known = op == ">="; - } - } else if (op == ">" || op == "<=") { - result = proveGreaterThan(varTok->values(), val); - known = op == ">"; - if (!result && !isSaturated(val)) { - result = proveLessThan(varTok->values(), val + 1); - known = op == "<="; - } - } - if (!result) + + if (!value.isKnown()) continue; - ValueFlow::Value value = *result; - value.intvalue = known; - value.bound = ValueFlow::Value::Bound::Point; - value.setKnown(); + + // MathLib::bigint val = 0; + // const Token* varTok = nullptr; + // std::string op = tok->str(); + // if (tok->astOperand1()->hasKnownIntValue()) { + // val = tok->astOperand1()->values().front().intvalue; + // varTok = tok->astOperand2(); + // // Flip the operator + // if (op == ">") + // op = "<"; + // else if (op == "<") + // op = ">"; + // else if (op == ">=") + // op = "<="; + // else if (op == "<=") + // op = ">="; + // } else if (tok->astOperand2()->hasKnownIntValue()) { + // val = tok->astOperand2()->values().front().intvalue; + // varTok = tok->astOperand1(); + // } + // if (!varTok) + // continue; + // if (varTok->hasKnownIntValue()) + // continue; + // if (varTok->values().empty()) + // continue; + // const ValueFlow::Value* result = nullptr; + // bool known = false; + // if (op == "==" || op == "!=") { + // result = proveNotEqual(varTok->values(), val); + // known = op == "!="; + // } else if (op == "<" || op == ">=") { + // result = proveLessThan(varTok->values(), val); + // known = op == "<"; + // if (!result && !isSaturated(val)) { + // result = proveGreaterThan(varTok->values(), val - 1); + // known = op == ">="; + // } + // } else if (op == ">" || op == "<=") { + // result = proveGreaterThan(varTok->values(), val); + // known = op == ">"; + // if (!result && !isSaturated(val)) { + // result = proveLessThan(varTok->values(), val + 1); + // known = op == "<="; + // } + // } + // if (!result) + // continue; + // ValueFlow::Value value = *result; + // value.intvalue = known; + // value.bound = ValueFlow::Value::Bound::Point; + // value.setKnown(); setTokenValue(tok, value, settings); } } diff --git a/lib/valueflow.h b/lib/valueflow.h index 76a8d0e6ad9..508627a0e56 100644 --- a/lib/valueflow.h +++ b/lib/valueflow.h @@ -385,6 +385,9 @@ struct LifetimeToken { const Token *parseCompareInt(const Token *tok, ValueFlow::Value &true_value, ValueFlow::Value &false_value, const std::function(const Token*)>& evaluate); const Token *parseCompareInt(const Token *tok, ValueFlow::Value &true_value, ValueFlow::Value &false_value); +ValueFlow::Value inferCondition(std::string op, MathLib::bigint val, const Token* varTok); +ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val); + std::vector getLifetimeTokens(const Token* tok, bool escape = false, ValueFlow::Value::ErrorPath errorPath = ValueFlow::Value::ErrorPath{}, diff --git a/test/testcondition.cpp b/test/testcondition.cpp index a18a3edecb6..250aea6ab4f 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -2411,7 +2411,7 @@ class TestCondition : public TestFixture { ASSERT_EQUALS("", errout.str()); check("void f1(const std::string &s) { if(s.size() >= 0) if(s.empty()) {}} "); - ASSERT_EQUALS("", errout.str()); + ASSERT_EQUALS("[test.cpp:1]: (style) Condition 's.size()>=0' is always true\n", errout.str()); // TODO: These are identical condition since size cannot be negative check("void f1(const std::string &s) { if(s.size() <= 0) if(s.empty()) {}} "); diff --git a/test/teststl.cpp b/test/teststl.cpp index 3cf96e6f449..64119e78b49 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -396,6 +396,14 @@ class TestStl : public TestFixture { " Bar(0.34, result[1]);\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + checkNormal("void f(size_t entries) {\n" + " std::vector v;\n" + " if (v.size() < entries + 2)\n" + " v.resize(entries + 2);\n" + " v[0] = 1;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void outOfBoundsIndexExpression() { From e1375b853b47d9c233d9b9502c07e8c345359041 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 17 Feb 2021 18:39:38 -0600 Subject: [PATCH 02/22] Remove commented out code --- lib/valueflow.cpp | 52 ----------------------------------------------- 1 file changed, 52 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index e39166ef31d..0f21f2feb9b 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -4812,58 +4812,6 @@ static void valueFlowInferCondition(TokenList* tokenlist, if (!value.isKnown()) continue; - - // MathLib::bigint val = 0; - // const Token* varTok = nullptr; - // std::string op = tok->str(); - // if (tok->astOperand1()->hasKnownIntValue()) { - // val = tok->astOperand1()->values().front().intvalue; - // varTok = tok->astOperand2(); - // // Flip the operator - // if (op == ">") - // op = "<"; - // else if (op == "<") - // op = ">"; - // else if (op == ">=") - // op = "<="; - // else if (op == "<=") - // op = ">="; - // } else if (tok->astOperand2()->hasKnownIntValue()) { - // val = tok->astOperand2()->values().front().intvalue; - // varTok = tok->astOperand1(); - // } - // if (!varTok) - // continue; - // if (varTok->hasKnownIntValue()) - // continue; - // if (varTok->values().empty()) - // continue; - // const ValueFlow::Value* result = nullptr; - // bool known = false; - // if (op == "==" || op == "!=") { - // result = proveNotEqual(varTok->values(), val); - // known = op == "!="; - // } else if (op == "<" || op == ">=") { - // result = proveLessThan(varTok->values(), val); - // known = op == "<"; - // if (!result && !isSaturated(val)) { - // result = proveGreaterThan(varTok->values(), val - 1); - // known = op == ">="; - // } - // } else if (op == ">" || op == "<=") { - // result = proveGreaterThan(varTok->values(), val); - // known = op == ">"; - // if (!result && !isSaturated(val)) { - // result = proveLessThan(varTok->values(), val + 1); - // known = op == "<="; - // } - // } - // if (!result) - // continue; - // ValueFlow::Value value = *result; - // value.intvalue = known; - // value.bound = ValueFlow::Value::Bound::Point; - // value.setKnown(); setTokenValue(tok, value, settings); } } From bc9ebeedc786d9818cd9547da0726b93ce55ce44 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 17 Feb 2021 18:47:08 -0600 Subject: [PATCH 03/22] Add more tests --- test/teststl.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/teststl.cpp b/test/teststl.cpp index 64119e78b49..4cf7da82d1d 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -404,6 +404,32 @@ class TestStl : public TestFixture { " v[0] = 1;\n" "}\n"); ASSERT_EQUALS("", errout.str()); + + checkNormal("void f(size_t entries) {\n" + " std::vector v;\n" + " if (v.size() < entries)\n" + " v.resize(entries);\n" + " v[0] = 1;\n" + "}\n"); + ASSERT_EQUALS("test.cpp:5:error:Out of bounds access in expression 'v[0]' because 'v' is empty.\n", errout.str()); + + checkNormal("void f(size_t entries) {\n" + " if (entries < 2) return;\n" + " std::vector v;\n" + " if (v.size() < entries)\n" + " v.resize(entries);\n" + " v[0] = 1;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); + + checkNormal("void f(size_t entries) {\n" + " if (entries == 0) return;\n" + " std::vector v;\n" + " if (v.size() < entries)\n" + " v.resize(entries);\n" + " v[0] = 1;\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void outOfBoundsIndexExpression() { From 2a3e9ba168fe41a34636adb6e2416ae0e168a398 Mon Sep 17 00:00:00 2001 From: Paul Date: Thu, 18 Feb 2021 22:51:14 -0600 Subject: [PATCH 04/22] Remove adjacent values --- lib/astutils.cpp | 5 +++ lib/astutils.h | 1 + lib/token.cpp | 92 +++++++++++++++++++++++++++++++++++++++++++++++ lib/valueflow.cpp | 77 ++++++++++++++++++++++----------------- lib/valueflow.h | 37 +++++++++++++++++++ 5 files changed, 179 insertions(+), 33 deletions(-) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index f1a7374515a..4e8ee26dcd3 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -167,6 +167,11 @@ bool astIsIntegral(const Token *tok, bool unknown) return vt->isIntegral() && vt->pointer == 0U; } +bool astIsUnsigned(const Token *tok) +{ + return tok && tok->valueType() && tok->valueType()->sign == ValueType::UNSIGNED; +} + bool astIsFloat(const Token *tok, bool unknown) { const ValueType *vt = tok ? tok->valueType() : nullptr; diff --git a/lib/astutils.h b/lib/astutils.h index 5bbe26aaf41..4b0d2c33bb8 100644 --- a/lib/astutils.h +++ b/lib/astutils.h @@ -70,6 +70,7 @@ bool astIsSignedChar(const Token *tok); bool astIsUnknownSignChar(const Token *tok); /** Is expression of integral type? */ bool astIsIntegral(const Token *tok, bool unknown); +bool astIsUnsigned(const Token *tok); /** Is expression of floating point type? */ bool astIsFloat(const Token *tok, bool unknown); /** Is expression of boolean type? */ diff --git a/lib/token.cpp b/lib/token.cpp index e9673f196dd..12f32209c09 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -24,10 +24,12 @@ #include "symboldatabase.h" #include "tokenlist.h" #include "utils.h" +#include "valueflow.h" #include #include #include +#include #include #include #include @@ -2015,6 +2017,94 @@ static void removeContradictions(std::list& values) } } +static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) +{ + if (x.bound == y.bound) { + return true; + } else { + if (x.valueType == ValueFlow::Value::ValueType::FLOAT) + return false; + return std::abs(x.intvalue - y.intvalue) == 1; + } +} + +using ValueIterator = std::list::iterator; + +template +static ValueIterator removeAdjacentValues(std::list& values, ValueIterator x, Iterator start, Iterator last) +{ + if (!isAdjacent(*x, **start)) + return std::next(x); + auto it = std::adjacent_find(start, last, [](ValueIterator x, ValueIterator y) { + return !isAdjacent(*x, *y); + }); + auto end = std::prev(last); + if (it != last) { + assert(*it != x); + end = std::next(it); + } + (*end)->bound = x->bound; + std::for_each(start, end, [&](ValueIterator y) { + values.erase(y); + }); + return values.erase(x); +} + +static void mergeAdjacent(std::list& values) +{ + auto prev = values.end(); + for (auto x = values.begin(); x != values.end();) { + if (x == prev) + printf("Infinite\n"); + // assert(x != prev); + prev = x; + if (x->isNonValue()) { + x++; + continue; + } + if (x->bound == ValueFlow::Value::Bound::Point) { + x++; + continue; + } + std::vector adjValues; + for (auto y = values.begin(); y != values.end();y++) { + if (x == y) + continue; + if (y->isNonValue()) + continue; + if (x->valueType != y->valueType) + continue; + if (x->valueKind != y->valueKind) + continue; + if (x->bound != y->bound) { + // No adjacent points for floating points + if (x->valueType == ValueFlow::Value::ValueType::FLOAT) + continue; + if (y->bound != ValueFlow::Value::Bound::Point) + continue; + } + if (x->bound == ValueFlow::Value::Bound::Lower && !y->compareValue(*x, ValueFlow::less{})) + continue; + if (x->bound == ValueFlow::Value::Bound::Upper && !x->compareValue(*y, ValueFlow::less{})) + continue; + adjValues.push_back(y); + } + if (adjValues.empty()) { + x++; + continue; + } + std::sort(adjValues.begin(), adjValues.end(), [&values](ValueIterator xx, ValueIterator yy) { + assert(xx != values.end() && yy != values.end()); + return xx->compareValue(*yy, ValueFlow::less{}); + }); + if (x->bound == ValueFlow::Value::Bound::Lower) + x = removeAdjacentValues(values, x, adjValues.rbegin(), adjValues.rend()); + else if (x->bound == ValueFlow::Value::Bound::Upper) + x = removeAdjacentValues(values, x, adjValues.begin(), adjValues.end()); + + } +} + bool Token::addValue(const ValueFlow::Value &value) { if (value.isKnown() && mImpl->mValues) { @@ -2100,6 +2190,8 @@ bool Token::addValue(const ValueFlow::Value &value) mImpl->mValues = new std::list(1, v); } + removeOverlaps(*mImpl->mValues); + mergeAdjacent(*mImpl->mValues); removeContradictions(*mImpl->mValues); return true; diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 0f21f2feb9b..52f13b39e22 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1431,6 +1431,49 @@ static void valueFlowRightShift(TokenList *tokenList, const Settings* settings) } } +static std::vector minUnsignedValue(const Token* tok, int depth = 8) +{ + std::vector result = {}; + if (!tok) + return result; + if (depth < 0) + return result; + if (tok->hasKnownIntValue()) { + result = {tok->values().front().intvalue}; + } else if (tok->isConstOp() && tok->astOperand1() && tok->astOperand2()) { + std::vector op1 = minUnsignedValue(tok->astOperand1(), depth - 1); + std::vector op2 = minUnsignedValue(tok->astOperand2(), depth - 1); + if (!op1.empty() && !op2.empty()) + result = {calculate(tok->str(), op1.front(), op2.front())}; + } + if (result.empty() && astIsUnsigned(tok)) + result = {0}; + return result; +} + +static void valueFlowImpossibleValues(TokenList *tokenList, const Settings* settings) +{ + for (Token *tok = tokenList->front(); tok; tok = tok->next()) { + if (tok->hasKnownIntValue()) + continue; + if (astIsUnsigned(tok)) { + std::vector minvalue = minUnsignedValue(tok); + if (minvalue.empty()) + continue; + ValueFlow::Value value{std::max(0, minvalue.front()) - 1}; + value.bound = ValueFlow::Value::Bound::Upper; + value.setImpossible(); + setTokenValue(tok, value, settings); + } + if (Token::simpleMatch(tok, "%") && tok->astOperand2() && tok->astOperand2()->hasKnownIntValue()) { + ValueFlow::Value value{tok->astOperand2()->values().front()}; + value.bound = ValueFlow::Value::Bound::Lower; + value.setImpossible(); + setTokenValue(tok, value, settings); + } + } +} + static void valueFlowEnumValue(SymbolDatabase * symboldatabase, const Settings * settings) { @@ -4692,26 +4735,6 @@ static const ValueFlow::Value* proveNotEqual(const std::list& return result; } -static std::vector minUnsignedValue(const Token* tok, int depth = 8) -{ - std::vector result = {}; - if (!tok) - return result; - if (depth < 0) - return result; - if (tok->hasKnownIntValue()) { - result = {tok->values().front().intvalue}; - } else if (tok->isConstOp() && tok->astOperand1() && tok->astOperand2()) { - std::vector op1 = minUnsignedValue(tok->astOperand1(), depth - 1); - std::vector op2 = minUnsignedValue(tok->astOperand2(), depth - 1); - if (!op1.empty() && !op1.empty()) - result = {calculate(tok->str(), op1.front(), op2.front())}; - } - if (result.empty() && tok->valueType() && tok->valueType()->sign == ValueType::UNSIGNED) - result = {0}; - return result; -} - ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, MathLib::bigint val) { if (!varTok) @@ -4721,19 +4744,6 @@ ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, Math if (std::none_of(varTok->values().begin(), varTok->values().end(), [](const ValueFlow::Value& v) { return v.isImpossible() && v.valueType == ValueFlow::Value::ValueType::INT; })) { - if (varTok->valueType() && varTok->valueType()->sign == ValueType::UNSIGNED && (op == ">" || op == ">=")) { - std::vector minvalue = minUnsignedValue(varTok); - if (minvalue.empty()) - return ValueFlow::Value{}; - bool isTrue = calculate(op, std::max(0, minvalue.front()), val); - if (!isTrue) - return ValueFlow::Value{}; - ValueFlow::Value value; - value.intvalue = 1; - value.bound = ValueFlow::Value::Bound::Point; - value.setKnown(); - return value; - } return ValueFlow::Value{}; } const ValueFlow::Value* result = nullptr; @@ -6798,6 +6808,7 @@ void ValueFlow::setValues(TokenList *tokenlist, SymbolDatabase* symboldatabase, std::size_t n = 4; while (n > 0 && values < getTotalValues(tokenlist)) { values = getTotalValues(tokenlist); + valueFlowImpossibleValues(tokenlist, settings); valueFlowPointerAliasDeref(tokenlist); valueFlowArrayBool(tokenlist); valueFlowRightShift(tokenlist, settings); diff --git a/lib/valueflow.h b/lib/valueflow.h index 508627a0e56..81ef548ba95 100644 --- a/lib/valueflow.h +++ b/lib/valueflow.h @@ -21,6 +21,7 @@ #define valueflowH //--------------------------------------------------------------------------- +#include "astutils.h" #include "config.h" #include "mathlib.h" #include "utils.h" @@ -54,6 +55,20 @@ namespace ValueFlow { } }; + struct less { + template + bool operator()(const T& x, const U& y) const { + return x < y; + } + }; + + struct adjacent { + template + bool operator()(const T& x, const U& y) const { + return std::abs(x - y) == 1; + } + }; + struct equalVisitor { template void operator()(bool& result, T x, U y) const { @@ -143,6 +158,28 @@ namespace ValueFlow { } } + struct compareVisitor { + struct innerVisitor { + template + void operator()(bool& result, Compare compare, T x, U y) const { + result = compare(x, y); + } + }; + template + void operator()(bool& result, const Value& rhs, Compare compare, T x) const { + visitValue(rhs, std::bind(innerVisitor{}, std::ref(result), std::move(compare), x, std::placeholders::_1)); + } + + }; + + template + bool compareValue(const Value& rhs, Compare compare) const + { + bool result = false; + visitValue(*this, std::bind(compareVisitor{}, std::ref(result), std::ref(rhs), std::move(compare), std::placeholders::_1)); + return result; + } + bool operator==(const Value &rhs) const { if (!equalValue(rhs)) return false; From b0f298bc524c8551a6e1ca42acd2351611d2e759 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 10:30:19 -0600 Subject: [PATCH 05/22] Dont truncate impossible values --- lib/valueflow.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 52f13b39e22..b9386513e5e 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -4040,6 +4040,9 @@ static std::list truncateValues(std::list va const size_t sz = ValueFlow::getSizeOf(*valueType, settings); for (ValueFlow::Value &value : values) { + // Dont truncate impossible values since those can be outside of the valid range + if (value.isImpossible()) + continue; if (value.isFloatValue()) { value.intvalue = value.floatValue; value.valueType = ValueFlow::Value::ValueType::INT; From 07ee20503b1a825f3971a1ea5c3dc36e52433e32 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 13:31:49 -0600 Subject: [PATCH 06/22] Fix some tests --- lib/valueflow.cpp | 5 ++++- test/cfg/windows.cpp | 1 + test/testcondition.cpp | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index b9386513e5e..3524c88c60e 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -421,6 +421,8 @@ static void setTokenValueCast(Token *parent, const ValueType &valueType, const V /** set ValueFlow value and perform calculations if possible */ static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Settings *settings) { + if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok)) + return; if (!tok->addValue(value)) return; @@ -1443,8 +1445,9 @@ static std::vector minUnsignedValue(const Token* tok, int depth } else if (tok->isConstOp() && tok->astOperand1() && tok->astOperand2()) { std::vector op1 = minUnsignedValue(tok->astOperand1(), depth - 1); std::vector op2 = minUnsignedValue(tok->astOperand2(), depth - 1); - if (!op1.empty() && !op2.empty()) + if (!op1.empty() && !op2.empty() && (!Token::Match(tok, "/|%") || op2.front() != 0)) { result = {calculate(tok->str(), op1.front(), op2.front())}; + } } if (result.empty() && astIsUnsigned(tok)) result = {0}; diff --git a/test/cfg/windows.cpp b/test/cfg/windows.cpp index 1e7990d37a9..8bac397520b 100644 --- a/test/cfg/windows.cpp +++ b/test/cfg/windows.cpp @@ -207,6 +207,7 @@ void validCode() wordInit = HIWORD(dwordInit); // cppcheck-suppress redundantAssignment byteInit = HIBYTE(wordInit); + // cppcheck-suppress knownConditionTrueFalse if (byteInit) {} bool boolVar; diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 250aea6ab4f..2e668d8491f 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -1718,7 +1718,8 @@ class TestCondition : public TestFixture { " b5 = a % 5 >= 5;\n" " return a % 5 > 5;\n" "}"); - ASSERT_EQUALS("[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + ASSERT_EQUALS("[test.cpp:7]: (style) Condition 'a%5>5' is always false\n" + "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" "[test.cpp:5]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" @@ -2375,7 +2376,7 @@ class TestCondition : public TestFixture { ASSERT_EQUALS("[test.cpp:1] -> [test.cpp:1]: (warning) Opposite inner 'if' condition leads to a dead code block.\n", errout.str()); check("void f1(const std::string &s) { if(s.size() < 0) if(s.empty()) {}} "); - ASSERT_EQUALS("[test.cpp:1] -> [test.cpp:1]: (warning) Opposite inner 'if' condition leads to a dead code block.\n", errout.str()); + ASSERT_EQUALS("[test.cpp:1]: (style) Condition 's.size()<0' is always false\n", errout.str()); check("void f1(const std::string &s) { if(s.empty()) if(s.size() > 42) {}} "); ASSERT_EQUALS("[test.cpp:1] -> [test.cpp:1]: (warning) Opposite inner 'if' condition leads to a dead code block.\n", errout.str()); From 75e8916aeff3010e0e568de8af3414a50a303381 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 15:48:06 -0600 Subject: [PATCH 07/22] Fix bug in removing contradictions --- lib/token.cpp | 127 ++++++++++++++++++++++------------------- test/testcondition.cpp | 3 +- 2 files changed, 71 insertions(+), 59 deletions(-) diff --git a/lib/token.cpp b/lib/token.cpp index 12f32209c09..9d01988cb50 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -1946,6 +1947,17 @@ const Token *Token::getValueTokenDeadPointer() const return nullptr; } +static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) +{ + if (x.bound == y.bound) { + return true; + } else { + if (x.valueType == ValueFlow::Value::ValueType::FLOAT) + return false; + return std::abs(x.intvalue - y.intvalue) == 1; + } +} + static bool removeContradiction(std::list& values) { bool result = false; @@ -1963,8 +1975,7 @@ static bool removeContradiction(std::list& values) continue; if (!x.equalValue(y)) continue; - if (x.bound == y.bound || - (x.bound != ValueFlow::Value::Bound::Point && y.bound != ValueFlow::Value::Bound::Point)) { + if (x.bound == y.bound) { const bool removex = !x.isImpossible() || y.isKnown(); const bool removey = !y.isImpossible() || x.isKnown(); if (removex) @@ -1972,61 +1983,29 @@ static bool removeContradiction(std::list& values) if (removey) values.remove(y); return true; - } else if (x.bound == ValueFlow::Value::Bound::Point) { - y.decreaseRange(); - result = true; + } else { + if (x.bound != ValueFlow::Value::Bound::Point) { + // Only decrease the range on possible values + if (!x.isImpossible()) + x.decreaseRange(); + } else { + values.remove(x); + return true; + } + if (y.bound != ValueFlow::Value::Bound::Point) { + // Only decrease the range on possible values + if (!y.isImpossible()) + y.decreaseRange(); + } else { + values.remove(y); + return true; + } } } } return result; } -static void removeOverlaps(std::list& values) -{ - for (ValueFlow::Value& x : values) { - if (x.isNonValue()) - continue; - values.remove_if([&](ValueFlow::Value& y) { - if (y.isNonValue()) - return false; - if (&x == &y) - return false; - if (x.valueType != y.valueType) - return false; - if (x.valueKind != y.valueKind) - return false; - // TODO: Remove points coverd in a lower or upper bound - // TODO: Remove lower or upper bound already covered by a lower and upper bound - if (!x.equalValue(y)) - return false; - if (x.bound != y.bound) - return false; - return true; - }); - } -} - -// Removing contradictions is an NP-hard problem. Instead we run multiple -// passes to try to catch most contradictions -static void removeContradictions(std::list& values) -{ - for (int i = 0; i < 4; i++) { - if (!removeContradiction(values)) - return; - removeOverlaps(values); - } -} - -static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) -{ - if (x.bound == y.bound) { - return true; - } else { - if (x.valueType == ValueFlow::Value::ValueType::FLOAT) - return false; - return std::abs(x.intvalue - y.intvalue) == 1; - } -} using ValueIterator = std::list::iterator; @@ -2052,12 +2031,7 @@ static ValueIterator removeAdjacentValues(std::list& values, V static void mergeAdjacent(std::list& values) { - auto prev = values.end(); for (auto x = values.begin(); x != values.end();) { - if (x == prev) - printf("Infinite\n"); - // assert(x != prev); - prev = x; if (x->isNonValue()) { x++; continue; @@ -2105,6 +2079,45 @@ static void mergeAdjacent(std::list& values) } } +static void removeOverlaps(std::list& values) +{ + for (ValueFlow::Value& x : values) { + if (x.isNonValue()) + continue; + values.remove_if([&](ValueFlow::Value& y) { + if (y.isNonValue()) + return false; + if (&x == &y) + return false; + if (x.valueType != y.valueType) + return false; + if (x.valueKind != y.valueKind) + return false; + // TODO: Remove points coverd in a lower or upper bound + // TODO: Remove lower or upper bound already covered by a lower and upper bound + if (!x.equalValue(y)) + return false; + if (x.bound != y.bound) + return false; + return true; + }); + } + mergeAdjacent(values); +} + +// Removing contradictions is an NP-hard problem. Instead we run multiple +// passes to try to catch most contradictions +static void removeContradictions(std::list& values) +{ + removeOverlaps(values); + for (int i = 0; i < 4; i++) { + if (!removeContradiction(values)) + return; + removeOverlaps(values); + } +} + + bool Token::addValue(const ValueFlow::Value &value) { if (value.isKnown() && mImpl->mValues) { @@ -2190,8 +2203,6 @@ bool Token::addValue(const ValueFlow::Value &value) mImpl->mValues = new std::list(1, v); } - removeOverlaps(*mImpl->mValues); - mergeAdjacent(*mImpl->mValues); removeContradictions(*mImpl->mValues); return true; diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 2e668d8491f..69374f97270 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -1731,7 +1731,8 @@ class TestCondition : public TestFixture { " if(x[593] % 5 <= 5)\n" " b2 = x.a % 5 == 5;\n" "}"); - ASSERT_EQUALS("[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + ASSERT_EQUALS("[test.cpp:3]: (style) Condition 'x[593]%5<=5' is always true\n" + "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n", errout.str()); From d7d4c44d5f90bf9f4da323aea6a5d0e111fc139e Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 19:59:02 -0600 Subject: [PATCH 08/22] Fix more bugs in removing contradictions --- lib/token.cpp | 67 +++++++++++++++++++++++++++----------------- test/cfg/windows.cpp | 1 - 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/lib/token.cpp b/lib/token.cpp index 9d01988cb50..7e94a57ffc8 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -1949,7 +1950,7 @@ const Token *Token::getValueTokenDeadPointer() const static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) { - if (x.bound == y.bound) { + if (x.bound != ValueFlow::Value::Bound::Point && x.bound == y.bound) { return true; } else { if (x.valueType == ValueFlow::Value::ValueType::FLOAT) @@ -1958,6 +1959,16 @@ static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) } } +static bool removePointValue(std::list& values, ValueFlow::Value& x) +{ + const bool isPoint = x.bound == ValueFlow::Value::Bound::Point; + if (!isPoint) + x.decreaseRange(); + else + values.remove(x); + return isPoint; +} + static bool removeContradiction(std::list& values) { bool result = false; @@ -1973,33 +1984,40 @@ static bool removeContradiction(std::list& values) continue; if (x.isImpossible() == y.isImpossible()) continue; - if (!x.equalValue(y)) + if (!x.equalValue(y)) { + auto compare = [](const ValueFlow::Value& x, const ValueFlow::Value& y) { + return x.compareValue(y, ValueFlow::less{}); + }; + const ValueFlow::Value& maxValue = std::max(x, y, compare); + const ValueFlow::Value& minValue = std::min(x, y, compare); + // TODO: Adjust non-points instead of removing them + if (maxValue.isImpossible() && maxValue.bound == ValueFlow::Value::Bound::Upper) { + values.remove(minValue); + return true; + } + if (minValue.isImpossible() && minValue.bound == ValueFlow::Value::Bound::Lower) { + values.remove(maxValue); + return true; + } continue; + } + const bool removex = !x.isImpossible() || y.isKnown(); + const bool removey = !y.isImpossible() || x.isKnown(); if (x.bound == y.bound) { - const bool removex = !x.isImpossible() || y.isKnown(); - const bool removey = !y.isImpossible() || x.isKnown(); if (removex) values.remove(x); if (removey) values.remove(y); return true; } else { - if (x.bound != ValueFlow::Value::Bound::Point) { - // Only decrease the range on possible values - if (!x.isImpossible()) - x.decreaseRange(); - } else { - values.remove(x); + result = removex || removey; + bool bail = false; + if (removex && removePointValue(values, x)) + bail = true; + if (removey && removePointValue(values, y)) + bail = true; + if (bail) return true; - } - if (y.bound != ValueFlow::Value::Bound::Point) { - // Only decrease the range on possible values - if (!y.isImpossible()) - y.decreaseRange(); - } else { - values.remove(y); - return true; - } } } } @@ -2017,13 +2035,10 @@ static ValueIterator removeAdjacentValues(std::list& values, V auto it = std::adjacent_find(start, last, [](ValueIterator x, ValueIterator y) { return !isAdjacent(*x, *y); }); - auto end = std::prev(last); - if (it != last) { - assert(*it != x); - end = std::next(it); - } - (*end)->bound = x->bound; - std::for_each(start, end, [&](ValueIterator y) { + if (it == last) + it--; + (*it)->bound = x->bound; + std::for_each(start, it, [&](ValueIterator y) { values.erase(y); }); return values.erase(x); diff --git a/test/cfg/windows.cpp b/test/cfg/windows.cpp index 8bac397520b..1e7990d37a9 100644 --- a/test/cfg/windows.cpp +++ b/test/cfg/windows.cpp @@ -207,7 +207,6 @@ void validCode() wordInit = HIWORD(dwordInit); // cppcheck-suppress redundantAssignment byteInit = HIBYTE(wordInit); - // cppcheck-suppress knownConditionTrueFalse if (byteInit) {} bool boolVar; From 56a140832820eb1d9df5ff8b896d83ba026f90fc Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 20:27:08 -0600 Subject: [PATCH 09/22] Skip literals --- lib/valueflow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 3524c88c60e..29dda95b637 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -421,7 +421,8 @@ static void setTokenValueCast(Token *parent, const ValueType &valueType, const V /** set ValueFlow value and perform calculations if possible */ static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Settings *settings) { - if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok)) + // Skip setting values that are too big since its ambiguous + if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok) && !tok->isLiteral()) return; if (!tok->addValue(value)) return; From c9a2d1ad6c2b618ac5c0bfddd098d7b543450e28 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 20:42:49 -0600 Subject: [PATCH 10/22] Flip assert --- test/testvalueflow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index dc60eee8ce2..71c1e5bf3bd 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -3456,7 +3456,7 @@ class TestValueFlow : public TestFixture { "}\n"; value = valueOfTok(code, "x <"); ASSERT(value.isPossible()); - ASSERT_EQUALS(value.intvalue, 0); + ASSERT_EQUALS(0, value.intvalue); code = "void f() {\n" " unsigned int x = 0;\n" From 680a4c6f366ead780edaa17c16eaa6f6d20e1ce7 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 20:49:38 -0600 Subject: [PATCH 11/22] Fix valueflow tests --- test/testvalueflow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 71c1e5bf3bd..b9d99f1fd53 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -3471,8 +3471,7 @@ class TestValueFlow : public TestFixture { " for (x = 0; x < 2; x++) {}\n" "}\n"; value = valueOfTok(code, "x <"); - ASSERT(value.isPossible()); - ASSERT_EQUALS(0, value.intvalue); + ASSERT(!value.isKnown()); } void valueFlowSubFunction() { @@ -5219,6 +5218,7 @@ class TestValueFlow : public TestFixture { " return x + 0;\n" "}"; values = tokenValues(code, "+", &s); + values.remove_if([](const ValueFlow::Value& v) { return v.isImpossible(); }); ASSERT_EQUALS(2, values.size()); ASSERT_EQUALS(0, values.front().intvalue); ASSERT_EQUALS(100, values.back().intvalue); From 64e3b01da4d773b853aef43afaf965f41c9e1c5f Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 20:53:25 -0600 Subject: [PATCH 12/22] Dont set literals --- lib/valueflow.cpp | 2 +- test/testvalueflow.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 29dda95b637..6c3cc10ddb9 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -422,7 +422,7 @@ static void setTokenValueCast(Token *parent, const ValueType &valueType, const V static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Settings *settings) { // Skip setting values that are too big since its ambiguous - if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok) && !tok->isLiteral()) + if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok)) return; if (!tok->addValue(value)) return; diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index b9d99f1fd53..ded6778730b 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -409,7 +409,7 @@ class TestValueFlow : public TestFixture { ASSERT_EQUALS(0, valueOfTok("x(NULL);", "NULL").intvalue); ASSERT_EQUALS((int)('a'), valueOfTok("x='a';", "'a'").intvalue); ASSERT_EQUALS((int)('\n'), valueOfTok("x='\\n';", "'\\n'").intvalue); - ASSERT_EQUALS(0xFFFFFFFF00000000, valueOfTok("x=0xFFFFFFFF00000000;","0xFFFFFFFF00000000").intvalue); // #7701 + TODO_ASSERT_EQUALS(0xFFFFFFFF00000000, -1, valueOfTok("x=0xFFFFFFFF00000000;","0xFFFFFFFF00000000").intvalue); // #7701 // scope { From 31b70677018854e4275657b0589e31b762f989c7 Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 20:54:42 -0600 Subject: [PATCH 13/22] Format --- lib/astutils.cpp | 2 +- lib/astutils.h | 2 +- lib/token.cpp | 15 ++++----------- lib/valueflow.cpp | 12 ++++++------ lib/valueflow.h | 30 ++++++++++++++++++------------ test/testcondition.cpp | 26 +++++++++++++++----------- test/testvalueflow.cpp | 3 ++- 7 files changed, 47 insertions(+), 43 deletions(-) diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 4e8ee26dcd3..3760252fe95 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -167,7 +167,7 @@ bool astIsIntegral(const Token *tok, bool unknown) return vt->isIntegral() && vt->pointer == 0U; } -bool astIsUnsigned(const Token *tok) +bool astIsUnsigned(const Token* tok) { return tok && tok->valueType() && tok->valueType()->sign == ValueType::UNSIGNED; } diff --git a/lib/astutils.h b/lib/astutils.h index 4b0d2c33bb8..2ca6c915d72 100644 --- a/lib/astutils.h +++ b/lib/astutils.h @@ -70,7 +70,7 @@ bool astIsSignedChar(const Token *tok); bool astIsUnknownSignChar(const Token *tok); /** Is expression of integral type? */ bool astIsIntegral(const Token *tok, bool unknown); -bool astIsUnsigned(const Token *tok); +bool astIsUnsigned(const Token* tok); /** Is expression of floating point type? */ bool astIsFloat(const Token *tok, bool unknown); /** Is expression of boolean type? */ diff --git a/lib/token.cpp b/lib/token.cpp index 7e94a57ffc8..8f3f6ae1701 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -2024,23 +2024,18 @@ static bool removeContradiction(std::list& values) return result; } - using ValueIterator = std::list::iterator; -template +template static ValueIterator removeAdjacentValues(std::list& values, ValueIterator x, Iterator start, Iterator last) { if (!isAdjacent(*x, **start)) return std::next(x); - auto it = std::adjacent_find(start, last, [](ValueIterator x, ValueIterator y) { - return !isAdjacent(*x, *y); - }); + auto it = std::adjacent_find(start, last, [](ValueIterator x, ValueIterator y) { return !isAdjacent(*x, *y); }); if (it == last) it--; (*it)->bound = x->bound; - std::for_each(start, it, [&](ValueIterator y) { - values.erase(y); - }); + std::for_each(start, it, [&](ValueIterator y) { values.erase(y); }); return values.erase(x); } @@ -2056,7 +2051,7 @@ static void mergeAdjacent(std::list& values) continue; } std::vector adjValues; - for (auto y = values.begin(); y != values.end();y++) { + for (auto y = values.begin(); y != values.end(); y++) { if (x == y) continue; if (y->isNonValue()) @@ -2090,7 +2085,6 @@ static void mergeAdjacent(std::list& values) x = removeAdjacentValues(values, x, adjValues.rbegin(), adjValues.rend()); else if (x->bound == ValueFlow::Value::Bound::Upper) x = removeAdjacentValues(values, x, adjValues.begin(), adjValues.end()); - } } @@ -2132,7 +2126,6 @@ static void removeContradictions(std::list& values) } } - bool Token::addValue(const ValueFlow::Value &value) { if (value.isKnown() && mImpl->mValues) { diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 6c3cc10ddb9..6d01f6a65e4 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1455,9 +1455,9 @@ static std::vector minUnsignedValue(const Token* tok, int depth return result; } -static void valueFlowImpossibleValues(TokenList *tokenList, const Settings* settings) +static void valueFlowImpossibleValues(TokenList* tokenList, const Settings* settings) { - for (Token *tok = tokenList->front(); tok; tok = tok->next()) { + for (Token* tok = tokenList->front(); tok; tok = tok->next()) { if (tok->hasKnownIntValue()) continue; if (astIsUnsigned(tok)) { @@ -4749,8 +4749,8 @@ ValueFlow::Value inferCondition(const std::string& op, const Token* varTok, Math if (varTok->hasKnownIntValue()) return ValueFlow::Value{}; if (std::none_of(varTok->values().begin(), varTok->values().end(), [](const ValueFlow::Value& v) { - return v.isImpossible() && v.valueType == ValueFlow::Value::ValueType::INT; - })) { + return v.isImpossible() && v.valueType == ValueFlow::Value::ValueType::INT; + })) { return ValueFlow::Value{}; } const ValueFlow::Value* result = nullptr; @@ -4818,11 +4818,11 @@ static void valueFlowInferCondition(TokenList* tokenlist, ValueFlow::Value value{}; std::string op = tok->str(); if (tok->astOperand1()->hasKnownIntValue()) { - MathLib::bigint val = tok->astOperand1()->values().front().intvalue; + MathLib::bigint val = tok->astOperand1()->values().front().intvalue; const Token* varTok = tok->astOperand2(); value = inferCondition(tok->str(), val, varTok); } else if (tok->astOperand2()->hasKnownIntValue()) { - MathLib::bigint val = tok->astOperand2()->values().front().intvalue; + MathLib::bigint val = tok->astOperand2()->values().front().intvalue; const Token* varTok = tok->astOperand1(); value = inferCondition(tok->str(), varTok, val); } diff --git a/lib/valueflow.h b/lib/valueflow.h index 81ef548ba95..db89e9389d1 100644 --- a/lib/valueflow.h +++ b/lib/valueflow.h @@ -56,15 +56,17 @@ namespace ValueFlow { }; struct less { - template - bool operator()(const T& x, const U& y) const { + template + bool operator()(const T& x, const U& y) const + { return x < y; } }; struct adjacent { - template - bool operator()(const T& x, const U& y) const { + template + bool operator()(const T& x, const U& y) const + { return std::abs(x - y) == 1; } }; @@ -160,23 +162,27 @@ namespace ValueFlow { struct compareVisitor { struct innerVisitor { - template - void operator()(bool& result, Compare compare, T x, U y) const { + template + void operator()(bool& result, Compare compare, T x, U y) const + { result = compare(x, y); } }; - template - void operator()(bool& result, const Value& rhs, Compare compare, T x) const { - visitValue(rhs, std::bind(innerVisitor{}, std::ref(result), std::move(compare), x, std::placeholders::_1)); + template + void operator()(bool& result, const Value& rhs, Compare compare, T x) const + { + visitValue(rhs, + std::bind(innerVisitor{}, std::ref(result), std::move(compare), x, std::placeholders::_1)); } - }; - template + template bool compareValue(const Value& rhs, Compare compare) const { bool result = false; - visitValue(*this, std::bind(compareVisitor{}, std::ref(result), std::ref(rhs), std::move(compare), std::placeholders::_1)); + visitValue( + *this, + std::bind(compareVisitor{}, std::ref(result), std::ref(rhs), std::move(compare), std::placeholders::_1)); return result; } diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 69374f97270..8eb3bdc4e44 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -1718,23 +1718,27 @@ class TestCondition : public TestFixture { " b5 = a % 5 >= 5;\n" " return a % 5 > 5;\n" "}"); - ASSERT_EQUALS("[test.cpp:7]: (style) Condition 'a%5>5' is always false\n" - "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:5]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:6]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:7]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n", errout.str()); + ASSERT_EQUALS( + "[test.cpp:7]: (style) Condition 'a%5>5' is always false\n" + "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:5]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:6]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:7]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n", + errout.str()); check("void f(bool& b1, bool& b2) {\n" " b1 = bar() % 5 < 889;\n" " if(x[593] % 5 <= 5)\n" " b2 = x.a % 5 == 5;\n" "}"); - ASSERT_EQUALS("[test.cpp:3]: (style) Condition 'x[593]%5<=5' is always true\n" - "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" - "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n", errout.str()); + ASSERT_EQUALS( + "[test.cpp:3]: (style) Condition 'x[593]%5<=5' is always true\n" + "[test.cpp:2]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:3]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n" + "[test.cpp:4]: (warning) Comparison of modulo result is predetermined, because it is always less than 5.\n", + errout.str()); check("void f() {\n" " if (a % 2 + b % 2 == 2)\n" diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index ded6778730b..44c2067f6a8 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -409,7 +409,8 @@ class TestValueFlow : public TestFixture { ASSERT_EQUALS(0, valueOfTok("x(NULL);", "NULL").intvalue); ASSERT_EQUALS((int)('a'), valueOfTok("x='a';", "'a'").intvalue); ASSERT_EQUALS((int)('\n'), valueOfTok("x='\\n';", "'\\n'").intvalue); - TODO_ASSERT_EQUALS(0xFFFFFFFF00000000, -1, valueOfTok("x=0xFFFFFFFF00000000;","0xFFFFFFFF00000000").intvalue); // #7701 + TODO_ASSERT_EQUALS( + 0xFFFFFFFF00000000, -1, valueOfTok("x=0xFFFFFFFF00000000;", "0xFFFFFFFF00000000").intvalue); // #7701 // scope { From 9a22bc8dee0458889c2680323ce85c784e23f10a Mon Sep 17 00:00:00 2001 From: Paul Date: Fri, 19 Feb 2021 21:01:23 -0600 Subject: [PATCH 14/22] Remove unnecessary headers --- lib/token.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/token.cpp b/lib/token.cpp index 8f3f6ae1701..fdd8bbe582f 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -29,8 +29,6 @@ #include #include #include -#include -#include #include #include #include From 0ef365119e8540bac08ae52c529422ad81e9551b Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 21 Feb 2021 19:33:24 -0600 Subject: [PATCH 15/22] Fix uninitialized variables --- lib/programmemory.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 722942a6365..c2696f5f0b3 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -425,7 +425,8 @@ void execute(const Token *expr, else if (expr->isComparisonOp()) { MathLib::bigint result1(0), result2(0); - bool error1, error2; + bool error1 = 0; + bool error2 = 0; execute(expr->astOperand1(), programMemory, &result1, &error1); execute(expr->astOperand2(), programMemory, &result2, &error2); if (error1 && error2) { From a53726de00be6e61a5b42046abf0673b76f42768 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 22 Feb 2021 11:46:54 -0600 Subject: [PATCH 16/22] Prevent UB in calculate function --- lib/valueflow.cpp | 51 +++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 5ad45549274..e8978ea3981 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -371,50 +371,57 @@ static bool isZero(T x) return isEqual(x, T(0)); } -template -static T calculate(const std::string& s, T x, T y) +template +static R calculate(const std::string& s, T x, T y) { + auto wrap = [](T z) { return R{z}; }; switch (MathLib::encodeMultiChar(s)) { case '+': - return x + y; + return wrap(x + y); case '-': - return x - y; + return wrap(x - y); case '*': - return x * y; + return wrap(x * y); case '/': - return x / y; + return isZero(y) ? R{} : wrap(x / y); case '%': - return MathLib::bigint(x) % MathLib::bigint(y); + return isZero(y) ? R{} : wrap(MathLib::bigint(x) % MathLib::bigint(y)); case '&': - return MathLib::bigint(x) & MathLib::bigint(y); + return wrap(MathLib::bigint(x) & MathLib::bigint(y)); case '|': - return MathLib::bigint(x) | MathLib::bigint(y); + return wrap(MathLib::bigint(x) | MathLib::bigint(y)); case '^': - return MathLib::bigint(x) ^ MathLib::bigint(y); + return wrap(MathLib::bigint(x) ^ MathLib::bigint(y)); case '>': - return x > y; + return wrap(x > y); case '<': - return x < y; + return wrap(x < y); case '<<': - return MathLib::bigint(x) << MathLib::bigint(y); + return (y >= sizeof(MathLib::bigint) * 8) ? R{} : wrap(MathLib::bigint(x) << MathLib::bigint(y)); case '>>': - return MathLib::bigint(x) >> MathLib::bigint(y); + return (y >= sizeof(MathLib::bigint) * 8) ? R{} : wrap(MathLib::bigint(x) >> MathLib::bigint(y)); case '&&': - return !isZero(x) && !isZero(y); + return wrap(!isZero(x) && !isZero(y)); case '||': - return !isZero(x) || !isZero(y); + return wrap(!isZero(x) || !isZero(y)); case '==': - return isEqual(x, y); + return wrap(isEqual(x, y)); case '!=': - return !isEqual(x, y); + return wrap(!isEqual(x, y)); case '>=': - return x >= y; + return wrap(x >= y); case '<=': - return x <= y; + return wrap(x <= y); } throw InternalError(nullptr, "Unknown operator: " + s); } +template +static T calculate(const std::string& s, T x, T y) +{ + return calculate(s, x, y); +} + /** Set token value for cast */ static void setTokenValueCast(Token *parent, const ValueType &valueType, const ValueFlow::Value &value, const Settings *settings); @@ -1446,8 +1453,8 @@ static std::vector minUnsignedValue(const Token* tok, int depth } else if (tok->isConstOp() && tok->astOperand1() && tok->astOperand2()) { std::vector op1 = minUnsignedValue(tok->astOperand1(), depth - 1); std::vector op2 = minUnsignedValue(tok->astOperand2(), depth - 1); - if (!op1.empty() && !op2.empty() && (!Token::Match(tok, "/|%") || op2.front() != 0)) { - result = {calculate(tok->str(), op1.front(), op2.front())}; + if (!op1.empty() && !op2.empty()) { + result = calculate>(tok->str(), op1.front(), op2.front()); } } if (result.empty() && astIsUnsigned(tok)) From 64fd616d94fd0d0abbb989bda3150c8593545d17 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 22 Feb 2021 12:47:17 -0600 Subject: [PATCH 17/22] Fix cppcheck warning --- lib/valueflow.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index e8978ea3981..dda94270ebe 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -372,7 +372,7 @@ static bool isZero(T x) } template -static R calculate(const std::string& s, T x, T y) +static R calculate(const std::string& s, const T& x, const T& y) { auto wrap = [](T z) { return R{z}; }; switch (MathLib::encodeMultiChar(s)) { @@ -417,7 +417,7 @@ static R calculate(const std::string& s, T x, T y) } template -static T calculate(const std::string& s, T x, T y) +static T calculate(const std::string& s, const T& x, const T& y) { return calculate(s, x, y); } From ad89530eef55d2fde426b0f9a77668e74e8b6c47 Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 24 Feb 2021 13:34:20 -0600 Subject: [PATCH 18/22] Check value type --- lib/valueflow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index dda94270ebe..74b57c9a079 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -429,7 +429,7 @@ static void setTokenValueCast(Token *parent, const ValueType &valueType, const V static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Settings *settings) { // Skip setting values that are too big since its ambiguous - if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok)) + if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok) && ValueFlow::getSizeOf(*tok->valueType(), settings) >= sizeof(MathLib::bigint)) return; if (!tok->addValue(value)) return; From 65f4519591b56cc1f8aa5a9b1799b96b0f62d24b Mon Sep 17 00:00:00 2001 From: Paul Date: Wed, 24 Feb 2021 13:34:42 -0600 Subject: [PATCH 19/22] Format --- lib/valueflow.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 74b57c9a079..d6a0d67941f 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -429,7 +429,8 @@ static void setTokenValueCast(Token *parent, const ValueType &valueType, const V static void setTokenValue(Token* tok, const ValueFlow::Value &value, const Settings *settings) { // Skip setting values that are too big since its ambiguous - if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok) && ValueFlow::getSizeOf(*tok->valueType(), settings) >= sizeof(MathLib::bigint)) + if (!value.isImpossible() && value.isIntValue() && value.intvalue < 0 && astIsUnsigned(tok) && + ValueFlow::getSizeOf(*tok->valueType(), settings) >= sizeof(MathLib::bigint)) return; if (!tok->addValue(value)) return; From b3af86c4a603554fa8d1b6feb3a05aed7390d2b0 Mon Sep 17 00:00:00 2001 From: Paul Date: Sun, 28 Feb 2021 17:44:31 -0600 Subject: [PATCH 20/22] Make test todo --- addons/test/misra/misra-test.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index d0c763af27c..01ab7afc1ae 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -241,7 +241,7 @@ void misra_7_2() { unsigned short h = 0x8000U; unsigned int i = 0x80000000; // 7.2 unsigned int j = 0x80000000U; - unsigned long long k = 0x8000000000000000; // 7.2 + unsigned long long k = 0x8000000000000000; // TODO 7.2 unsigned long long l = 0x8000000000000000ULL; unsigned int m = 1 + 0x80000000; // 7.2 10.4 From 0377a41f242855cedda9cc117c6c2dff77ab3662 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 29 Mar 2021 22:52:39 -0500 Subject: [PATCH 21/22] Remove else --- lib/token.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/lib/token.cpp b/lib/token.cpp index 30117a07015..846a999cb6c 100644 --- a/lib/token.cpp +++ b/lib/token.cpp @@ -1951,13 +1951,11 @@ const Token *Token::getValueTokenDeadPointer() const static bool isAdjacent(const ValueFlow::Value& x, const ValueFlow::Value& y) { - if (x.bound != ValueFlow::Value::Bound::Point && x.bound == y.bound) { + if (x.bound != ValueFlow::Value::Bound::Point && x.bound == y.bound) return true; - } else { - if (x.valueType == ValueFlow::Value::ValueType::FLOAT) - return false; - return std::abs(x.intvalue - y.intvalue) == 1; - } + if (x.valueType == ValueFlow::Value::ValueType::FLOAT) + return false; + return std::abs(x.intvalue - y.intvalue) == 1; } static bool removePointValue(std::list& values, ValueFlow::Value& x) From 0ccd789ab6e3ce2a3701182a62f5d23fd451bcd5 Mon Sep 17 00:00:00 2001 From: Paul Date: Mon, 29 Mar 2021 22:58:12 -0500 Subject: [PATCH 22/22] Rerun dmake --- Makefile | 126 +++++++++++++++++++++++++++---------------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/Makefile b/Makefile index 435779e8c5e..6af57a37c68 100644 --- a/Makefile +++ b/Makefile @@ -415,13 +415,13 @@ $(libcppdir)/astutils.o: lib/astutils.cpp lib/astutils.h lib/config.h lib/errort $(libcppdir)/bughuntingchecks.o: lib/bughuntingchecks.cpp lib/astutils.h lib/bughuntingchecks.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/bughuntingchecks.o $(libcppdir)/bughuntingchecks.cpp -$(libcppdir)/check.o: lib/check.cpp lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/check.o: lib/check.cpp lib/astutils.h lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/check.o $(libcppdir)/check.cpp -$(libcppdir)/check64bit.o: lib/check64bit.cpp lib/check.h lib/check64bit.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/check64bit.o: lib/check64bit.cpp lib/astutils.h lib/check.h lib/check64bit.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/check64bit.o $(libcppdir)/check64bit.cpp -$(libcppdir)/checkassert.o: lib/checkassert.cpp lib/check.h lib/checkassert.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checkassert.o: lib/checkassert.cpp lib/astutils.h lib/check.h lib/checkassert.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkassert.o $(libcppdir)/checkassert.cpp $(libcppdir)/checkautovariables.o: lib/checkautovariables.cpp lib/astutils.h lib/check.h lib/checkautovariables.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -430,7 +430,7 @@ $(libcppdir)/checkautovariables.o: lib/checkautovariables.cpp lib/astutils.h lib $(libcppdir)/checkbool.o: lib/checkbool.cpp lib/astutils.h lib/check.h lib/checkbool.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkbool.o $(libcppdir)/checkbool.cpp -$(libcppdir)/checkboost.o: lib/checkboost.cpp lib/check.h lib/checkboost.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checkboost.o: lib/checkboost.cpp lib/astutils.h lib/check.h lib/checkboost.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkboost.o $(libcppdir)/checkboost.cpp $(libcppdir)/checkbufferoverrun.o: lib/checkbufferoverrun.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkbufferoverrun.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -442,7 +442,7 @@ $(libcppdir)/checkclass.o: lib/checkclass.cpp externals/tinyxml2/tinyxml2.h lib/ $(libcppdir)/checkcondition.o: lib/checkcondition.cpp lib/astutils.h lib/check.h lib/checkcondition.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkcondition.o $(libcppdir)/checkcondition.cpp -$(libcppdir)/checkexceptionsafety.o: lib/checkexceptionsafety.cpp lib/check.h lib/checkexceptionsafety.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checkexceptionsafety.o: lib/checkexceptionsafety.cpp lib/astutils.h lib/check.h lib/checkexceptionsafety.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkexceptionsafety.o $(libcppdir)/checkexceptionsafety.cpp $(libcppdir)/checkfunctions.o: lib/checkfunctions.cpp lib/astutils.h lib/check.h lib/checkfunctions.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -451,7 +451,7 @@ $(libcppdir)/checkfunctions.o: lib/checkfunctions.cpp lib/astutils.h lib/check.h $(libcppdir)/checkinternal.o: lib/checkinternal.cpp lib/astutils.h lib/check.h lib/checkinternal.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkinternal.o $(libcppdir)/checkinternal.cpp -$(libcppdir)/checkio.o: lib/checkio.cpp lib/check.h lib/checkio.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checkio.o: lib/checkio.cpp lib/astutils.h lib/check.h lib/checkio.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkio.o $(libcppdir)/checkio.cpp $(libcppdir)/checkleakautovar.o: lib/checkleakautovar.cpp lib/astutils.h lib/check.h lib/checkleakautovar.h lib/checkmemoryleak.h lib/checknullpointer.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -466,10 +466,10 @@ $(libcppdir)/checknullpointer.o: lib/checknullpointer.cpp lib/astutils.h lib/che $(libcppdir)/checkother.o: lib/checkother.cpp lib/astutils.h lib/check.h lib/checkother.h lib/checkuninitvar.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkother.o $(libcppdir)/checkother.cpp -$(libcppdir)/checkpostfixoperator.o: lib/checkpostfixoperator.cpp lib/check.h lib/checkpostfixoperator.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checkpostfixoperator.o: lib/checkpostfixoperator.cpp lib/astutils.h lib/check.h lib/checkpostfixoperator.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkpostfixoperator.o $(libcppdir)/checkpostfixoperator.cpp -$(libcppdir)/checksizeof.o: lib/checksizeof.cpp lib/check.h lib/checksizeof.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/checksizeof.o: lib/checksizeof.cpp lib/astutils.h lib/check.h lib/checksizeof.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checksizeof.o $(libcppdir)/checksizeof.cpp $(libcppdir)/checkstl.o: lib/checkstl.cpp lib/astutils.h lib/check.h lib/checknullpointer.h lib/checkstl.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/pathanalysis.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -493,16 +493,16 @@ $(libcppdir)/checkunusedvar.o: lib/checkunusedvar.cpp externals/simplecpp/simple $(libcppdir)/checkvaarg.o: lib/checkvaarg.cpp lib/astutils.h lib/check.h lib/checkvaarg.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/checkvaarg.o $(libcppdir)/checkvaarg.cpp -$(libcppdir)/clangimport.o: lib/clangimport.cpp lib/clangimport.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/clangimport.o: lib/clangimport.cpp lib/astutils.h lib/clangimport.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/clangimport.o $(libcppdir)/clangimport.cpp -$(libcppdir)/cppcheck.o: lib/cppcheck.cpp externals/picojson/picojson.h externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/analyzerinfo.h lib/check.h lib/checkunusedfunctions.h lib/clangimport.h lib/config.h lib/cppcheck.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/version.h +$(libcppdir)/cppcheck.o: lib/cppcheck.cpp externals/picojson/picojson.h externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/analyzerinfo.h lib/astutils.h lib/check.h lib/checkunusedfunctions.h lib/clangimport.h lib/config.h lib/cppcheck.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/version.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/cppcheck.o $(libcppdir)/cppcheck.cpp $(libcppdir)/ctu.o: lib/ctu.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/ctu.o $(libcppdir)/ctu.cpp -$(libcppdir)/errorlogger.o: lib/errorlogger.cpp externals/tinyxml2/tinyxml2.h lib/analyzerinfo.h lib/check.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/errorlogger.o: lib/errorlogger.cpp externals/tinyxml2/tinyxml2.h lib/analyzerinfo.h lib/astutils.h lib/check.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/errorlogger.o $(libcppdir)/errorlogger.cpp $(libcppdir)/errortypes.o: lib/errortypes.cpp lib/config.h lib/errortypes.h @@ -514,7 +514,7 @@ $(libcppdir)/exprengine.o: lib/exprengine.cpp lib/astutils.h lib/bughuntingcheck $(libcppdir)/forwardanalyzer.o: lib/forwardanalyzer.cpp lib/analyzer.h lib/astutils.h lib/config.h lib/errortypes.h lib/forwardanalyzer.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/utils.h lib/valueflow.h lib/valueptr.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/forwardanalyzer.o $(libcppdir)/forwardanalyzer.cpp -$(libcppdir)/importproject.o: lib/importproject.cpp externals/picojson/picojson.h externals/tinyxml2/tinyxml2.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/importproject.o: lib/importproject.cpp externals/picojson/picojson.h externals/tinyxml2/tinyxml2.h lib/astutils.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/importproject.o $(libcppdir)/importproject.cpp $(libcppdir)/library.o: lib/library.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h @@ -544,10 +544,10 @@ $(libcppdir)/programmemory.o: lib/programmemory.cpp lib/astutils.h lib/config.h $(libcppdir)/reverseanalyzer.o: lib/reverseanalyzer.cpp lib/analyzer.h lib/astutils.h lib/config.h lib/errortypes.h lib/forwardanalyzer.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/reverseanalyzer.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/utils.h lib/valueflow.h lib/valueptr.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/reverseanalyzer.o $(libcppdir)/reverseanalyzer.cpp -$(libcppdir)/settings.o: lib/settings.cpp lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/timer.h lib/utils.h lib/valueflow.h +$(libcppdir)/settings.o: lib/settings.cpp lib/astutils.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/timer.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/settings.o $(libcppdir)/settings.cpp -$(libcppdir)/summaries.o: lib/summaries.cpp lib/analyzerinfo.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/summaries.o: lib/summaries.cpp lib/analyzerinfo.h lib/astutils.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/summaries.o $(libcppdir)/summaries.cpp $(libcppdir)/suppressions.o: lib/suppressions.cpp externals/tinyxml2/tinyxml2.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/mathlib.h lib/path.h lib/suppressions.h lib/utils.h @@ -556,7 +556,7 @@ $(libcppdir)/suppressions.o: lib/suppressions.cpp externals/tinyxml2/tinyxml2.h $(libcppdir)/symboldatabase.o: lib/symboldatabase.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/symboldatabase.o $(libcppdir)/symboldatabase.cpp -$(libcppdir)/templatesimplifier.o: lib/templatesimplifier.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/templatesimplifier.o: lib/templatesimplifier.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/templatesimplifier.o $(libcppdir)/templatesimplifier.cpp $(libcppdir)/timer.o: lib/timer.cpp lib/config.h lib/timer.h @@ -565,10 +565,10 @@ $(libcppdir)/timer.o: lib/timer.cpp lib/config.h lib/timer.h $(libcppdir)/token.o: lib/token.cpp lib/astutils.h lib/config.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/token.o $(libcppdir)/token.cpp -$(libcppdir)/tokenize.o: lib/tokenize.cpp externals/simplecpp/simplecpp.h lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/tokenize.o: lib/tokenize.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/tokenize.o $(libcppdir)/tokenize.cpp -$(libcppdir)/tokenlist.o: lib/tokenlist.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h +$(libcppdir)/tokenlist.o: lib/tokenlist.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h $(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o $(libcppdir)/tokenlist.o $(libcppdir)/tokenlist.cpp $(libcppdir)/utils.o: lib/utils.cpp lib/config.h lib/utils.h @@ -595,46 +595,46 @@ cli/threadexecutor.o: cli/threadexecutor.cpp cli/cppcheckexecutor.h cli/threadex test/options.o: test/options.cpp test/options.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/options.o test/options.cpp -test/test64bit.o: test/test64bit.cpp lib/check.h lib/check64bit.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/test64bit.o: test/test64bit.cpp lib/astutils.h lib/check.h lib/check64bit.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/test64bit.o test/test64bit.cpp -test/testassert.o: test/testassert.cpp lib/check.h lib/checkassert.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testassert.o: test/testassert.cpp lib/astutils.h lib/check.h lib/checkassert.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testassert.o test/testassert.cpp test/testastutils.o: test/testastutils.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testastutils.o test/testastutils.cpp -test/testautovariables.o: test/testautovariables.cpp lib/check.h lib/checkautovariables.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testautovariables.o: test/testautovariables.cpp lib/astutils.h lib/check.h lib/checkautovariables.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testautovariables.o test/testautovariables.cpp -test/testbool.o: test/testbool.cpp lib/check.h lib/checkbool.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testbool.o: test/testbool.cpp lib/astutils.h lib/check.h lib/checkbool.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testbool.o test/testbool.cpp -test/testboost.o: test/testboost.cpp lib/check.h lib/checkboost.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testboost.o: test/testboost.cpp lib/astutils.h lib/check.h lib/checkboost.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testboost.o test/testboost.cpp -test/testbufferoverrun.o: test/testbufferoverrun.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkbufferoverrun.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testbufferoverrun.o: test/testbufferoverrun.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkbufferoverrun.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testbufferoverrun.o test/testbufferoverrun.cpp -test/testbughuntingchecks.o: test/testbughuntingchecks.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testbughuntingchecks.o: test/testbughuntingchecks.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testbughuntingchecks.o test/testbughuntingchecks.cpp -test/testcharvar.o: test/testcharvar.cpp lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testcharvar.o: test/testcharvar.cpp lib/astutils.h lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testcharvar.o test/testcharvar.cpp -test/testclangimport.o: test/testclangimport.cpp lib/clangimport.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testclangimport.o: test/testclangimport.cpp lib/astutils.h lib/clangimport.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testclangimport.o test/testclangimport.cpp -test/testclass.o: test/testclass.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkclass.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testclass.o: test/testclass.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkclass.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testclass.o test/testclass.cpp test/testcmdlineparser.o: test/testcmdlineparser.cpp cli/cmdlineparser.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/redirect.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testcmdlineparser.o test/testcmdlineparser.cpp -test/testcondition.o: test/testcondition.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkcondition.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testcondition.o: test/testcondition.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkcondition.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testcondition.o test/testcondition.cpp -test/testconstructors.o: test/testconstructors.cpp lib/check.h lib/checkclass.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testconstructors.o: test/testconstructors.cpp lib/astutils.h lib/check.h lib/checkclass.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testconstructors.o test/testconstructors.cpp test/testcppcheck.o: test/testcppcheck.cpp lib/analyzerinfo.h lib/check.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h @@ -643,52 +643,52 @@ test/testcppcheck.o: test/testcppcheck.cpp lib/analyzerinfo.h lib/check.h lib/co test/testerrorlogger.o: test/testerrorlogger.cpp lib/analyzerinfo.h lib/check.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testerrorlogger.o test/testerrorlogger.cpp -test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/check.h lib/checkexceptionsafety.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/astutils.h lib/check.h lib/checkexceptionsafety.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testexceptionsafety.o test/testexceptionsafety.cpp -test/testexprengine.o: test/testexprengine.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testexprengine.o: test/testexprengine.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/exprengine.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testexprengine.o test/testexprengine.cpp test/testfilelister.o: test/testfilelister.cpp cli/filelister.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/pathmatch.h lib/suppressions.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testfilelister.o test/testfilelister.cpp -test/testfunctions.o: test/testfunctions.cpp externals/tinyxml2/tinyxml2.h lib/check.h lib/checkfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testfunctions.o: test/testfunctions.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testfunctions.o test/testfunctions.cpp -test/testgarbage.o: test/testgarbage.cpp lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testgarbage.o: test/testgarbage.cpp lib/astutils.h lib/check.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testgarbage.o test/testgarbage.cpp test/testimportproject.o: test/testimportproject.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testimportproject.o test/testimportproject.cpp -test/testincompletestatement.o: test/testincompletestatement.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testincompletestatement.o: test/testincompletestatement.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testincompletestatement.o test/testincompletestatement.cpp -test/testinternal.o: test/testinternal.cpp lib/check.h lib/checkinternal.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testinternal.o: test/testinternal.cpp lib/astutils.h lib/check.h lib/checkinternal.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testinternal.o test/testinternal.cpp -test/testio.o: test/testio.cpp lib/check.h lib/checkio.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testio.o: test/testio.cpp lib/astutils.h lib/check.h lib/checkio.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testio.o test/testio.cpp -test/testleakautovar.o: test/testleakautovar.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkleakautovar.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testleakautovar.o: test/testleakautovar.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkleakautovar.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testleakautovar.o test/testleakautovar.cpp -test/testlibrary.o: test/testlibrary.cpp externals/tinyxml2/tinyxml2.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testlibrary.o: test/testlibrary.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testlibrary.o test/testlibrary.cpp test/testmathlib.o: test/testmathlib.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/mathlib.h lib/suppressions.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testmathlib.o test/testmathlib.cpp -test/testmemleak.o: test/testmemleak.cpp lib/check.h lib/checkmemoryleak.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testmemleak.o: test/testmemleak.cpp lib/astutils.h lib/check.h lib/checkmemoryleak.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testmemleak.o test/testmemleak.cpp -test/testnullpointer.o: test/testnullpointer.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checknullpointer.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testnullpointer.o: test/testnullpointer.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/checknullpointer.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testnullpointer.o test/testnullpointer.cpp test/testoptions.o: test/testoptions.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h test/options.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testoptions.o test/testoptions.cpp -test/testother.o: test/testother.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testother.o: test/testother.cpp externals/simplecpp/simplecpp.h externals/tinyxml2/tinyxml2.h lib/astutils.h lib/check.h lib/checkother.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testother.o test/testother.cpp test/testpath.o: test/testpath.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/path.h lib/suppressions.h test/testsuite.h @@ -700,7 +700,7 @@ test/testpathmatch.o: test/testpathmatch.cpp lib/config.h lib/errorlogger.h lib/ test/testplatform.o: test/testplatform.cpp externals/tinyxml2/tinyxml2.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/platform.h lib/suppressions.h lib/utils.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testplatform.o test/testplatform.cpp -test/testpostfixoperator.o: test/testpostfixoperator.cpp lib/check.h lib/checkpostfixoperator.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testpostfixoperator.o: test/testpostfixoperator.cpp lib/astutils.h lib/check.h lib/checkpostfixoperator.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testpostfixoperator.o test/testpostfixoperator.cpp test/testpreprocessor.o: test/testpreprocessor.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h @@ -712,37 +712,37 @@ test/testrunner.o: test/testrunner.cpp externals/simplecpp/simplecpp.h lib/confi test/testsamples.o: test/testsamples.cpp cli/cppcheckexecutor.h cli/filelister.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/path.h lib/pathmatch.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/redirect.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsamples.o test/testsamples.cpp -test/testsimplifytemplate.o: test/testsimplifytemplate.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsimplifytemplate.o: test/testsimplifytemplate.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsimplifytemplate.o test/testsimplifytemplate.cpp -test/testsimplifytokens.o: test/testsimplifytokens.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsimplifytokens.o: test/testsimplifytokens.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsimplifytokens.o test/testsimplifytokens.cpp -test/testsimplifytypedef.o: test/testsimplifytypedef.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsimplifytypedef.o: test/testsimplifytypedef.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsimplifytypedef.o test/testsimplifytypedef.cpp -test/testsimplifyusing.o: test/testsimplifyusing.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsimplifyusing.o: test/testsimplifyusing.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsimplifyusing.o test/testsimplifyusing.cpp -test/testsizeof.o: test/testsizeof.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checksizeof.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsizeof.o: test/testsizeof.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/checksizeof.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsizeof.o test/testsizeof.cpp -test/teststl.o: test/teststl.cpp lib/check.h lib/checkstl.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/teststl.o: test/teststl.cpp lib/astutils.h lib/check.h lib/checkstl.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/teststl.o test/teststl.cpp -test/teststring.o: test/teststring.cpp lib/check.h lib/checkstring.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/teststring.o: test/teststring.cpp lib/astutils.h lib/check.h lib/checkstring.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/teststring.o test/teststring.cpp test/testsuite.o: test/testsuite.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h test/options.h test/redirect.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsuite.o test/testsuite.cpp -test/testsummaries.o: test/testsummaries.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testsummaries.o: test/testsummaries.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/summaries.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsummaries.o test/testsummaries.cpp test/testsuppressions.o: test/testsuppressions.cpp cli/threadexecutor.h lib/analyzerinfo.h lib/check.h lib/config.h lib/cppcheck.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsuppressions.o test/testsuppressions.cpp -test/testsymboldatabase.o: test/testsymboldatabase.cpp externals/tinyxml2/tinyxml2.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h +test/testsymboldatabase.o: test/testsymboldatabase.cpp externals/tinyxml2/tinyxml2.h lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testsymboldatabase.o test/testsymboldatabase.cpp test/testthreadexecutor.o: test/testthreadexecutor.cpp cli/threadexecutor.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/timer.h lib/utils.h test/testsuite.h @@ -751,40 +751,40 @@ test/testthreadexecutor.o: test/testthreadexecutor.cpp cli/threadexecutor.h lib/ test/testtimer.o: test/testtimer.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/suppressions.h lib/timer.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testtimer.o test/testtimer.cpp -test/testtoken.o: test/testtoken.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h +test/testtoken.o: test/testtoken.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testtoken.o test/testtoken.cpp -test/testtokenize.o: test/testtokenize.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testtokenize.o: test/testtokenize.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testtokenize.o test/testtokenize.cpp -test/testtokenlist.o: test/testtokenlist.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testtokenlist.o: test/testtokenlist.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testtokenlist.o test/testtokenlist.cpp -test/testtype.o: test/testtype.cpp lib/check.h lib/checktype.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testtype.o: test/testtype.cpp lib/astutils.h lib/check.h lib/checktype.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testtype.o test/testtype.cpp -test/testuninitvar.o: test/testuninitvar.cpp lib/check.h lib/checkuninitvar.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testuninitvar.o: test/testuninitvar.cpp lib/astutils.h lib/check.h lib/checkuninitvar.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testuninitvar.o test/testuninitvar.cpp -test/testunusedfunctions.o: test/testunusedfunctions.cpp lib/check.h lib/checkunusedfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testunusedfunctions.o: test/testunusedfunctions.cpp lib/astutils.h lib/check.h lib/checkunusedfunctions.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testunusedfunctions.o test/testunusedfunctions.cpp -test/testunusedprivfunc.o: test/testunusedprivfunc.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checkclass.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testunusedprivfunc.o: test/testunusedprivfunc.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/checkclass.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testunusedprivfunc.o test/testunusedprivfunc.cpp -test/testunusedvar.o: test/testunusedvar.cpp externals/simplecpp/simplecpp.h lib/check.h lib/checkunusedvar.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testunusedvar.o: test/testunusedvar.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/check.h lib/checkunusedvar.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testunusedvar.o test/testunusedvar.cpp -test/testutils.o: test/testutils.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h +test/testutils.o: test/testutils.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h test/testutils.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testutils.o test/testutils.cpp -test/testvaarg.o: test/testvaarg.cpp lib/check.h lib/checkvaarg.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testvaarg.o: test/testvaarg.cpp lib/astutils.h lib/check.h lib/checkvaarg.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testvaarg.o test/testvaarg.cpp -test/testvalueflow.o: test/testvalueflow.cpp externals/simplecpp/simplecpp.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testvalueflow.o: test/testvalueflow.cpp externals/simplecpp/simplecpp.h lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testvalueflow.o test/testvalueflow.cpp -test/testvarid.o: test/testvarid.cpp lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h +test/testvarid.o: test/testvarid.cpp lib/astutils.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/importproject.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/standards.h lib/suppressions.h lib/templatesimplifier.h lib/timer.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h test/testsuite.h $(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CPPFILESDIR) $(CXXFLAGS) $(UNDEF_STRICT_ANSI) -c -o test/testvarid.o test/testvarid.cpp externals/simplecpp/simplecpp.o: externals/simplecpp/simplecpp.cpp externals/simplecpp/simplecpp.h