Describe the bug
A Cpp2 for loop that uses 'next' is implemented as a do { } while(false) loop inside the main loop -- and the 'next' is done right after the do () while (false). And there's no special treatment for 'break' in that inner loop.
The consequence is that 'break' only breaks out of the do {} while (false) and not the actual loop.
To Reproduce
Steps to reproduce the behavior:
In this code at Compiler Explorer:
myarray: std::array<i32, 4> = (0, 1, 2, 3);
i := 0;
for myarray next i++ do (member) {
if member == 0 {
break;
}
}
std::cout << "i = " << i << std::endl;
return i;
}
This should print "i = 1" but instead prints "i = 4".