Clang static analyzer makes wrong assumptions whether a loop body is entered, even with sufficient context

Clang static analyzer gives the waring “warning: Division by zero [clang-analyzer-core.DivideZero]” on following code:

#include <vector>

unsigned func2(int x) {
    std::vector<int> v{x};
    unsigned count = 0;
    for (auto &y: v) {
        count++;
    }
    return 100 / count;
}

However, it fails to give any waring on the following code:

unsigned func2(int x) {
    std::vector<int> v;
    return 100 / v.size();
}

I am not clear with what strategy static analyzer takes to report warnings, but it seems not appropriate here.
BTW, is there any options to let clang not report warnings which lack sufficient evidience?