OSDN Git Service

* fibheap.c (fibheap_replace_key_data): Make sure we don't early
authormatz <matz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 May 2009 02:55:25 +0000 (02:55 +0000)
committermatz <matz@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 29 May 2009 02:55:25 +0000 (02:55 +0000)
        out when forcing the minimum.
        (fibheap_delete_node): Assert that we managed to force the minimum.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@147968 138bc75d-0d04-0410-961f-82ee72b054a4

libiberty/ChangeLog
libiberty/fibheap.c

index 850979a..837dbda 100644 (file)
@@ -1,3 +1,9 @@
+2009-05-29  Michael Matz  <matz@suse.de>
+
+       * fibheap.c (fibheap_replace_key_data): Make sure we don't early
+       out when forcing the minimum.
+       (fibheap_delete_node): Assert that we managed to force the minimum.
+
 2009-05-25  Tristan Gingold  <gingold@adacore.com>
 
        * config.h-vms: Rewritten.  Define configure macros.
index c032149..a37ee4e 100644 (file)
@@ -214,7 +214,10 @@ fibheap_replace_key_data (fibheap_t heap, fibnode_t node,
   node->key = key;
   y = node->parent;
 
-  if (okey == key)
+  /* Short-circuit if the key is the same, as we then don't have to
+     do anything.  Except if we're trying to force the new node to
+     be the new minimum for delete.  */
+  if (okey == key && okey != FIBHEAPKEY_MIN)
     return odata;
 
   /* These two compares are specifically <= 0 to make sure that in the case
@@ -256,6 +259,11 @@ fibheap_delete_node (fibheap_t heap, fibnode_t node)
 
   /* To perform delete, we just make it the min key, and extract.  */
   fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
+  if (node != heap->min)
+    {
+      fprintf (stderr, "Can't force minimum on fibheap.\n");
+      abort ();
+    }
   fibheap_extract_min (heap);
 
   return ret;