Consider: main() { while(1); } and: (fhpd) break main (fhpd) step gets infinite reports of the breakpoint main being hit. this is caused by the breakpoint code not injecting a "breakpoint-hit" event into the stepping engine.
This function, even without optimization, degenerates to one instruction after the function prologue: a jump to itself. The address of the breakpoint is this instruction. For reference, gdb shows the same behavior with optimized and optimized version of the function.