summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2019-03-14 18:47:01 -0400
committerJakub Jelinek <jakub@gcc.gnu.org>2019-03-14 23:47:01 +0100
commit62de703f1990d2c4dd7ee0c41bfa886b5c589793 (patch)
tree2a29bb29ec24c6fcd36a8c7374df0da26cd7134b
parent12fb7712a8a20fce6f3dac80251e67251c01c209 (diff)
hash-table.h (remove_elt_with_hash): Return if slot is NULL rather than if is_empty (*slot).
* hash-table.h (remove_elt_with_hash): Return if slot is NULL rather than if is_empty (*slot). * hash-set-tests.c (test_set_of_strings): Add tests for addition of existing elt and for elt removal. * hash-map-tests.c (test_map_of_strings_to_int): Add test for removal of already removed elt. * hashtab.c (htab_remove_elt_with_hash): Return if slot is NULL rather than if *slot is HTAB_EMPTY_ENTRY. Co-Authored-By: Jakub Jelinek <jakub@redhat.com> From-SVN: r269695
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/hash-map-tests.c4
-rw-r--r--gcc/hash-set-tests.c15
-rw-r--r--gcc/hash-table.h2
-rw-r--r--libiberty/ChangeLog6
-rw-r--r--libiberty/hashtab.c2
6 files changed, 37 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4890c75c94b..394271f8bc2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2019-03-14 Jason Merrill <jason@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * hash-table.h (remove_elt_with_hash): Return if slot is NULL rather
+ than if is_empty (*slot).
+ * hash-set-tests.c (test_set_of_strings): Add tests for addition of
+ existing elt and for elt removal.
+ * hash-map-tests.c (test_map_of_strings_to_int): Add test for removal
+ of already removed elt.
+
2019-03-15 H.J. Lu <hongjiu.lu@intel.com>
PR target/89650
diff --git a/gcc/hash-map-tests.c b/gcc/hash-map-tests.c
index 2137464e693..acbfdb9e9ab 100644
--- a/gcc/hash-map-tests.c
+++ b/gcc/hash-map-tests.c
@@ -78,6 +78,10 @@ test_map_of_strings_to_int ()
ASSERT_EQ (5, m.elements ());
ASSERT_EQ (NULL, m.get (eric));
+ m.remove (eric);
+ ASSERT_EQ (5, m.elements ());
+ ASSERT_EQ (NULL, m.get (eric));
+
/* A plain char * key is hashed based on its value (address), rather
than the string it points to. */
char *another_ant = static_cast <char *> (xcalloc (4, 1));
diff --git a/gcc/hash-set-tests.c b/gcc/hash-set-tests.c
index 5ca1e4eea8c..f75d41aed39 100644
--- a/gcc/hash-set-tests.c
+++ b/gcc/hash-set-tests.c
@@ -48,11 +48,26 @@ test_set_of_strings ()
ASSERT_EQ (false, s.add (red));
ASSERT_EQ (false, s.add (green));
ASSERT_EQ (false, s.add (blue));
+ ASSERT_EQ (true, s.add (green));
/* Verify that the values are now within the set. */
ASSERT_EQ (true, s.contains (red));
ASSERT_EQ (true, s.contains (green));
ASSERT_EQ (true, s.contains (blue));
+ ASSERT_EQ (3, s.elements ());
+
+ /* Test removal. */
+ s.remove (red);
+ ASSERT_EQ (false, s.contains (red));
+ ASSERT_EQ (true, s.contains (green));
+ ASSERT_EQ (true, s.contains (blue));
+ ASSERT_EQ (2, s.elements ());
+
+ s.remove (red);
+ ASSERT_EQ (false, s.contains (red));
+ ASSERT_EQ (true, s.contains (green));
+ ASSERT_EQ (true, s.contains (blue));
+ ASSERT_EQ (2, s.elements ());
}
/* Run all of the selftests within this file. */
diff --git a/gcc/hash-table.h b/gcc/hash-table.h
index 1fd36946a53..9e09fa487f8 100644
--- a/gcc/hash-table.h
+++ b/gcc/hash-table.h
@@ -940,7 +940,7 @@ hash_table<Descriptor, Allocator>
::remove_elt_with_hash (const compare_type &comparable, hashval_t hash)
{
value_type *slot = find_slot_with_hash (comparable, hash, NO_INSERT);
- if (is_empty (*slot))
+ if (slot == NULL)
return;
Descriptor::remove (*slot);
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index f6325589927..cc44e4213d1 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,9 @@
+2019-03-14 Jason Merrill <jason@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ * hashtab.c (htab_remove_elt_with_hash): Return if slot is NULL rather
+ than if *slot is HTAB_EMPTY_ENTRY.
+
2019-02-11 Philippe Waroquiers <philippe.waroquiers@skynet.be>
* splay-tree.c (splay_tree_insert): Also release old KEY in case
diff --git a/libiberty/hashtab.c b/libiberty/hashtab.c
index 880c8787716..9f917c3571d 100644
--- a/libiberty/hashtab.c
+++ b/libiberty/hashtab.c
@@ -725,7 +725,7 @@ htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash)
PTR *slot;
slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
- if (*slot == HTAB_EMPTY_ENTRY)
+ if (slot == NULL)
return;
if (htab->del_f)