X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=libiberty%2Ffibheap.c;h=a37ee4ef270a55d9df7d47c5722272a9b5f78cab;hb=91068ec6ae02e85c5ca4fbe3c6e214bd87bb872f;hp=c032149c0c24fc9639d9c56725691e9d4035aed8;hpb=01f0fe5e0450edf168c1f612feb93cf588e4e7ea;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/fibheap.c b/libiberty/fibheap.c index c032149c0c..a37ee4ef27 100644 --- a/libiberty/fibheap.c +++ b/libiberty/fibheap.c @@ -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;