--------------------------------------------------------------------------- Detect division by zero. ---------------------------------------------------------------------------
| 2466 | // Detect division by zero. |
| 2467 | //--------------------------------------------------------------------------- |
| 2468 | void CheckOtherImpl::checkZeroDivision() |
| 2469 | { |
| 2470 | logChecker("CheckOther::checkZeroDivision"); |
| 2471 | |
| 2472 | for (const Token *tok = mTokenizer->tokens(); tok; tok = tok->next()) { |
| 2473 | if (!tok->astOperand2() || !tok->astOperand1()) |
| 2474 | continue; |
| 2475 | if (tok->str() != "%" && tok->str() != "/" && tok->str() != "%=" && tok->str() != "/=") |
| 2476 | continue; |
| 2477 | if (!tok->valueType() || !tok->valueType()->isIntegral()) |
| 2478 | continue; |
| 2479 | if (tok->scope() && tok->scope()->type == ScopeType::eEnum) // don't warn for compile-time error |
| 2480 | continue; |
| 2481 | |
| 2482 | // Value flow.. |
| 2483 | const ValueFlow::Value *value = tok->astOperand2()->getValue(0LL); |
| 2484 | if (value && mSettings.isEnabled(value, false)) |
| 2485 | zerodivError(tok, value); |
| 2486 | } |
| 2487 | } |
| 2488 | |
| 2489 | void CheckOtherImpl::zerodivError(const Token *tok, const ValueFlow::Value *value) |
| 2490 | { |
no test coverage detected