| 1422 | } |
| 1423 | |
| 1424 | static bool compareKnownValue(const Token * const tok1, const Token * const tok2, const std::function<bool(const ValueFlow::Value&, const ValueFlow::Value&, bool)> &compare) |
| 1425 | { |
| 1426 | static const auto isKnownFn = std::mem_fn(&ValueFlow::Value::isKnown); |
| 1427 | |
| 1428 | const auto v1 = std::find_if(tok1->values().cbegin(), tok1->values().cend(), isKnownFn); |
| 1429 | if (v1 == tok1->values().end()) { |
| 1430 | return false; |
| 1431 | } |
| 1432 | if (v1->isNonValue() || v1->isContainerSizeValue() || v1->isBufferSizeValue() || v1->isSymbolicValue()) |
| 1433 | return false; |
| 1434 | const auto v2 = std::find_if(tok2->values().cbegin(), tok2->values().cend(), isKnownFn); |
| 1435 | if (v2 == tok2->values().end()) { |
| 1436 | return false; |
| 1437 | } |
| 1438 | if (v1->valueType != v2->valueType) { |
| 1439 | return false; |
| 1440 | } |
| 1441 | const bool sameLifetime = isSameLifetime(tok1, tok2); |
| 1442 | return compare(*v1, *v2, sameLifetime); |
| 1443 | } |
| 1444 | |
| 1445 | bool isEqualKnownValue(const Token * const tok1, const Token * const tok2) |
| 1446 | { |
no test coverage detected