Das ist kein Bug, der Quelltext sollte trotzdem korrekt funktionieren. Der Compiler nimmt glaube ich einfach Result als Schleifenvariable sozusagen. Und deshalb muss an der Stelle nix mehr passieren, diese Zeilen gibt es praktisch nicht mehr nach der Optimierung.
Schau in den Assemblercode an der Stelle (Haltepunkt aufs if und dann Strg + Shift + C), dann wirst du sehen, dass (vermute ich) in EBX gezählt wird und das Register am Ende ggf. auf 0 gesetzt wird (mit xor).
Abtippen um das zu überprüfen wollte ich den Code jetzt nicht.^^