MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / setConditionalValues

Function setConditionalValues

lib/valueflow.cpp:237–271  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235}
236
237static void setConditionalValues(const Token* tok,
238 bool lhs,
239 MathLib::bigint value,
240 ValueFlow::Value& true_value,
241 ValueFlow::Value& false_value)
242{
243 if (Token::Match(tok, "==|!=|>=|<=")) {
244 setConditionalValue(true_value, tok, value);
245 const char* greaterThan = ">=";
246 const char* lessThan = "<=";
247 if (lhs)
248 std::swap(greaterThan, lessThan);
249 if (Token::simpleMatch(tok, greaterThan, strlen(greaterThan))) {
250 setConditionalValue(false_value, tok, value - 1);
251 } else if (Token::simpleMatch(tok, lessThan, strlen(lessThan))) {
252 setConditionalValue(false_value, tok, value + 1);
253 } else {
254 setConditionalValue(false_value, tok, value);
255 }
256 } else {
257 const char* greaterThan = ">";
258 const char* lessThan = "<";
259 if (lhs)
260 std::swap(greaterThan, lessThan);
261 if (Token::simpleMatch(tok, greaterThan, strlen(greaterThan))) {
262 setConditionalValue(true_value, tok, value + 1);
263 setConditionalValue(false_value, tok, value);
264 } else if (Token::simpleMatch(tok, lessThan, strlen(lessThan))) {
265 setConditionalValue(true_value, tok, value - 1);
266 setConditionalValue(false_value, tok, value);
267 }
268 }
269 setValueBound(true_value, tok, lhs);
270 setValueBound(false_value, tok, !lhs);
271}
272
273static bool isSaturated(MathLib::bigint value)
274{

Callers 2

parseCompareEachIntFunction · 0.85
parseMethod · 0.85

Calls 4

setConditionalValueFunction · 0.85
setValueBoundFunction · 0.85
swapFunction · 0.70
simpleMatchFunction · 0.70

Tested by

no test coverage detected