| 200 | } |
| 201 | |
| 202 | static bool isCompatibleValues(const Value& value1, const Value& value2) |
| 203 | { |
| 204 | if (value1.isSymbolicValue() && value2.isSymbolicValue() && value1.tokvalue->exprId() != value2.tokvalue->exprId()) |
| 205 | return false; |
| 206 | if (!isCompatibleValueTypes(value1.valueType, value2.valueType)) |
| 207 | return false; |
| 208 | if (value1.isKnown() || value2.isKnown()) |
| 209 | return true; |
| 210 | if (value1.isImpossible() || value2.isImpossible()) |
| 211 | return false; |
| 212 | if (value1.varId == 0 || value2.varId == 0) |
| 213 | return true; |
| 214 | if (value1.varId == value2.varId && value1.varvalue == value2.varvalue && value1.isIntValue() && value2.isIntValue()) |
| 215 | return true; |
| 216 | return false; |
| 217 | } |
| 218 | |
| 219 | /** set ValueFlow value and perform calculations if possible */ |
| 220 | void setTokenValue(Token* tok, |
no test coverage detected