Index: gcc/cfganal.c =================================================================== *** gcc/cfganal.c (revision 122742) --- gcc/cfganal.c (working copy) *************** Software Foundation, 51 Franklin Street, *** 33,38 **** --- 33,39 ---- #include "toplev.h" #include "tm_p.h" #include "timevar.h" + #include "flags.h" /* Store the data structures necessary for depth-first search. */ struct depth_first_search_dsS { *************** forwarder_block_p (basic_block bb) *** 86,92 **** { rtx insn; ! if (bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR || !single_succ_p (bb)) return false; --- 87,94 ---- { rtx insn; ! if (!optimize ! || bb == EXIT_BLOCK_PTR || bb == ENTRY_BLOCK_PTR || !single_succ_p (bb)) return false; Index: gcc/c-typeck.c =================================================================== *** gcc/c-typeck.c (revision 122742) --- gcc/c-typeck.c (working copy) *************** c_finish_bc_stmt (tree *label_p, bool is *** 7350,7355 **** --- 7350,7359 ---- if (skip) return NULL_TREE; + /* Add an empty statement to be sure the goto statement has its own line. */ + if (!optimize) + add_stmt (build_empty_stmt ()); + return add_stmt (build1 (GOTO_EXPR, void_type_node, label)); } Index: gcc/tree-cfgcleanup.c =================================================================== *** gcc/tree-cfgcleanup.c (revision 122742) --- gcc/tree-cfgcleanup.c (working copy) *************** cleanup_tree_cfg_1 (void) *** 550,561 **** start_recording_case_labels (); retval |= cleanup_forwarder_blocks (); end_recording_case_labels (); - } ! /* Merging the blocks may create new opportunities for folding ! conditional branches (due to the elimination of single-valued PHI ! nodes). */ ! retval |= merge_seq_blocks (); return retval; } --- 550,562 ---- start_recording_case_labels (); retval |= cleanup_forwarder_blocks (); end_recording_case_labels (); ! /* Merging the blocks may create new opportunities for folding ! conditional branches (due to the elimination of single-valued PHI ! nodes). ! Because it may remove statements it is enabled only if optimizing. */ ! retval |= merge_seq_blocks (); ! } return retval; } Index: gcc/tree-cfg.c =================================================================== *** gcc/tree-cfg.c (revision 122742) --- gcc/tree-cfg.c (working copy) *************** remove_useless_stmts_1 (tree *tp, struct *** 1823,1829 **** while (!tsi_end_p (i)) { t = tsi_stmt (i); ! if (IS_EMPTY_STMT (t)) { tsi_delink (&i); continue; --- 1823,1832 ---- while (!tsi_end_p (i)) { t = tsi_stmt (i); ! ! /* Remove empty statements unless optimizing. Front-end may ! build empty statement to be create blocks. */ ! if (optimize && IS_EMPTY_STMT (t)) { tsi_delink (&i); continue;