| Index: gcc/libiberty/fibheap.c
|
| diff --git a/gcc/libiberty/fibheap.c b/gcc/libiberty/fibheap.c
|
| index c032149c0c24fc9639d9c56725691e9d4035aed8..a37ee4ef270a55d9df7d47c5722272a9b5f78cab 100644
|
| --- a/gcc/libiberty/fibheap.c
|
| +++ b/gcc/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;
|
|
|