https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121685
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The 2nd issue is blacksq.size () might be > UINT_MAX. Using 'int' for i or using i < (unsigned int)blacksq.size() avoids this. So we can vectorize the following, side-stepping both issues. The IV issue should have worked by niter assumptions (but I don't see those - huh) and marking IVs as non-wrapping. Analyzing # of iterations of loop 1 exit condition [1, + , 1] < (long unsigned int) __dif_33 bounds on difference of bases: -1 ... 18446744073709551614 result: zero if __dif_33 == 0 # of iterations (long unsigned int) __dif_33 + 18446744073709551615, bounded by 18446744073709551614 #include <vector> size_t s; void fun(std::vector<int>& blacksq, std::vector<int>& m_mcowner) { s = m_mcowner.size (); for (unsigned int i = 0; i < (unsigned int)blacksq.size(); i++) { if (blacksq[i]) { m_mcowner[i]++; } } }