X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=libiberty%2Ffibheap.c;h=b89722810069f3d3532f2c1a990b2f9cade171d2;hb=refs%2Fheads%2Fconcurrent-displaced-stepping-2020-04-01;hp=e1d818c28939f3a628dae5c689f6d8fe86a5ba69;hpb=49b1fae4309ab5b9833f0af388483c2b6b4b3d50;p=deliverable%2Fbinutils-gdb.git diff --git a/libiberty/fibheap.c b/libiberty/fibheap.c index e1d818c289..b897228100 100644 --- a/libiberty/fibheap.c +++ b/libiberty/fibheap.c @@ -1,5 +1,5 @@ /* A Fibonacci heap datatype. - Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by Daniel Berlin (dan@cgsoftware.com). This file is part of GNU CC. @@ -16,8 +16,8 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with GNU CC; see the file COPYING. If not, write to -the Free Software Foundation, 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. */ +the Free Software Foundation, 51 Franklin Street - Fifth Floor, +Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -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;