diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 983e3d9dcbf467c2f6e431cd449b017089dee4e1..68fe46565601780a5050d7279f4fa3f9d643b5bf 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2007-01-18  Jan Hubicka  <jh@suse.cz>
+
+	* tree-ssa-operands.c (vop_free_bucket_size): Never return value
+	greater than NUM_VOP_FREE_BUCKETS.
+
 2007-01-18  Daniel Berlin  <dberlin@dberlin.org>
 
 	* tree-ssa-structalias.c: Update comments.
diff --git a/gcc/tree-ssa-operands.c b/gcc/tree-ssa-operands.c
index 23e493a2b04fac3334d29ce5926acc7eb58108a9..0006de924493dd92bf3aa2413cf755f3e0af2489 100644
--- a/gcc/tree-ssa-operands.c
+++ b/gcc/tree-ssa-operands.c
@@ -305,15 +305,17 @@ vop_free_bucket_size (int bucket)
 static inline int 
 vop_free_bucket_index (int num)
 {
-  gcc_assert (num > 0);
+  gcc_assert (num > 0 && NUM_VOP_FREE_BUCKETS > 16);
 
   /* Sizes 1 through 16 use buckets 0-15.  */
   if (num <= 16)
     return num - 1;
-  /* Buckets 16 - 45  represent 17 through 256 in 8 unit chunks.  */
-  if (num < 256)
-    return 14 + (num - 1) / 8;
-  return -1;
+  /* Buckets 16 - NUM_VOP_FREE_BUCKETS represent 8 unit chunks.  */
+  num = 14 + (num - 1) / 8;
+  if (num >= NUM_VOP_FREE_BUCKETS)
+    return -1;
+  else
+    return num;
 }