- /* create the header block */
- ir_node *header_block = new_immBlock();
- if (get_cur_block() != NULL) {
- ir_node *const jmp = new_Jmp();
- add_immBlock_pred(header_block, jmp);
- }
-
- /* the loop body */
- ir_node *old_continue_label = continue_label;
- ir_node *old_break_label = break_label;
- continue_label = header_block;
- break_label = NULL;
-
- ir_node *body_block = new_immBlock();
- set_cur_block(body_block);
- statement_to_firm(statement->body);
- ir_node *false_block = break_label;
-
- assert(continue_label == header_block);
- continue_label = old_continue_label;
- break_label = old_break_label;
+ ir_node *const pred = currently_reachable() ? new_Jmp() : new_Bad(mode_X);
+ add_immBlock_pred(target_block, pred);
+}