Wondering about the semicolon with a different approach, why not have something to void that?
for x in iter {
dreak 0 // dreak could be anything or even break_raw
} // <--
In the above case, dreak
could made the for loop automatically get the inner value.
Or even using semicolon for control, nice idea but may be confusing to beginners at first.
Either way, I still think match follows by for loop seemed ugly and can be yet another iterator-like options.
match for x in iter { if x == 4 { break x } } {
None => /* then */,
Some(_) => /* else */,
}