diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2ce31e7d208a6deb36ec90141abc1c1ea5ce9544..bb6f61dc05f84174abe248607232b81303c199c4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Mon Feb 17 16:16:54 CET 2003  Jan Hubicka  <jh@suse.cz>
+
+	* recog.c (split_all_insns):  Fix memory overflow.
+
 2003-02-17  Kazu Hirata  <kazu@cs.umass.edu>
 
 	* config/h8300/h8300.md (cmpqi): Remove mode from compare.
diff --git a/gcc/recog.c b/gcc/recog.c
index bfa988b4b167c77a4323e47a69b53b89b3baf08f..6206be1700c668a8a10005468a3dc439b5a5400b 100644
--- a/gcc/recog.c
+++ b/gcc/recog.c
@@ -2882,10 +2882,18 @@ split_all_insns (upd_life)
 
       find_many_sub_basic_blocks (blocks);
 
-      while (old_last_basic_block < last_basic_block)
+      if (old_last_basic_block != last_basic_block && upd_life)
 	{
-	  SET_BIT (blocks, old_last_basic_block);
-	  old_last_basic_block++;
+	  sbitmap new_blocks = sbitmap_alloc (last_basic_block);
+
+	  sbitmap_copy (new_blocks, blocks);
+	  while (old_last_basic_block < last_basic_block)
+	    {
+	      SET_BIT (new_blocks, old_last_basic_block);
+	      old_last_basic_block++;
+	    }
+	  sbitmap_free (blocks);
+	  new_blocks = blocks;
 	}
     }