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;
