Menu ▾ ▴

FALSE NEGATIVE: `zerodiv` misses zero assigned by a temporary object's destructor

Rodri
2026-09-17
3 days ago
  • Rodri

    Rodri - 2026-09-17

    Hi, I found a false negative in Cppcheck 2.21.0 and 2.22 dev when destruction of a temporary object changes a global value to zero before a division.

    Affected tool

    Cppcheck 2.21.0; also reproduced with Cppcheck 2.22 dev

    Affected checker

    Cppcheck CheckOther::checkZeroDivision (zerodiv / zerodivcond)

    Minimal reproducer

    int global;
    
    struct Value {
        Value() { global = 1; }
        ~Value() { global = 0; }
    };
    
    int test() {
        Value{};
        return 1 / global;
    }
    

    Reproduction command

    cppcheck --version
    cppcheck --enable=warning --std=c++17 --checkers-report=checkers.txt --template='{file}:{line}:{column}: [{id}] {message}' cppcheck-zerodiv-fn-temporary-destructor.cpp
    

    Current behavior

    Cppcheck produces neither a zerodiv nor a zerodivcond diagnostic. The checker report lists CheckOther::checkZeroDivision as active.

    Expected behavior

    Cppcheck should report line 10 because the temporary's destructor assigns zero to global before the division.

     
  • CHR

    CHR - 3 days ago
     

Log in to post a comment.