Index: function.c
===================================================================
--- function.c	(revision 192692)
+++ function.c	(working copy)
@@ -6517,7 +6517,7 @@ epilogue_done:
       basic_block simple_return_block_cold = NULL;
       edge pending_edge_hot = NULL;
       edge pending_edge_cold = NULL;
-      basic_block exit_pred = EXIT_BLOCK_PTR->prev_bb;
+      basic_block exit_pred;
       int i;
 
       gcc_assert (entry_edge != orig_entry_edge);
@@ -6545,6 +6545,12 @@ epilogue_done:
 	    else
 	      pending_edge_cold = e;
 	  }
+      
+      /* Save a pointer to the exit's predecessor BB for use in
+         inserting new BBs at the end of the function. Do this
+         after the call to split_block above which may split
+         the original exit pred.  */
+      exit_pred = EXIT_BLOCK_PTR->prev_bb;
 
       FOR_EACH_VEC_ELT (edge, unconverted_simple_returns, i, e)
 	{
Index: bb-reorder.c
===================================================================
--- bb-reorder.c	(revision 192692)
+++ bb-reorder.c	(working copy)
@@ -2188,6 +2188,8 @@ insert_section_boundary_note (void)
 	first_partition = BB_PARTITION (bb);
       if (BB_PARTITION (bb) != first_partition)
 	{
+          /* There should be a barrier between text sections. */
+          emit_barrier_after (BB_END (bb->prev_bb));
 	  new_note = emit_note_before (NOTE_INSN_SWITCH_TEXT_SECTIONS,
 				       BB_HEAD (bb));
 	  /* ??? This kind of note always lives between basic blocks,
Index: cfgrtl.c
===================================================================
--- cfgrtl.c	(revision 192692)
+++ cfgrtl.c	(working copy)
@@ -912,7 +912,8 @@ rtl_can_merge_blocks (basic_block a, basic_block b
      partition boundaries).  See  the comments at the top of
      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
 
-  if (BB_PARTITION (a) != BB_PARTITION (b))
+  if (find_reg_note (BB_END (a), REG_CROSSING_JUMP, NULL_RTX)
+      || BB_PARTITION (a) != BB_PARTITION (b))
     return false;
 
   /* Protect the loop latches.  */
@@ -3978,7 +3979,8 @@ cfg_layout_can_merge_blocks_p (basic_block a, basi
      partition boundaries).  See  the comments at the top of
      bb-reorder.c:partition_hot_cold_basic_blocks for complete details.  */
 
-  if (BB_PARTITION (a) != BB_PARTITION (b))
+  if (find_reg_note (BB_END (a), REG_CROSSING_JUMP, NULL_RTX)
+      || BB_PARTITION (a) != BB_PARTITION (b))
     return false;
 
   /* Protect the loop latches.  */
