Here’s a simpler test case which points out that it’s a compiler bug:
http://coliru.stacked-crooked.com/a/58b3f9b4edd8e373
#include <cstdint>
int main()
{
uint32_t i = 0;
uint32_t count = 1;
while (1)
{
if( i < 5 )
count+=1;
if (i == 0xFFFFFFFF)
break;
i++;
}
return count; // should return 6
}
The assembly shows that it outputs 1, instead of 6. It doesn’t think it’s an infinite loop either, in which case the assembly doesn’t return from main.