diff options
author | Alexandre Oliva <oliva@adacore.com> | 2022-12-29 14:33:07 -0300 |
---|---|---|
committer | Alexandre Oliva <oliva@gnu.org> | 2022-12-29 14:39:47 -0300 |
commit | 603da201681ad06342055e8c12a656f5289e52a8 (patch) | |
tree | 4312591c8fce568e824ab3875e420cd4b769b8cc /gcc | |
parent | 512af6c3803c4714cb2a92a8db263fb7f2b4ea10 (diff) | |
download | gcc-603da201681ad06342055e8c12a656f5289e52a8.zip gcc-603da201681ad06342055e8c12a656f5289e52a8.tar.gz gcc-603da201681ad06342055e8c12a656f5289e52a8.tar.bz2 |
prevent hash set/map insertion of deleted entries
Just like the recently-added checks for empty entries, add checks for
deleted entries as well. This didn't catch any problems, but it might
prevent future accidents. Suggested by David Malcolm.
for gcc/ChangeLog
* hash-map.h (put, get_or_insert): Check that added entry
doesn't look deleted either.
* hash-set.h (add): Likewise.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/hash-map.h | 8 | ||||
-rw-r--r-- | gcc/hash-set.h | 3 |
2 files changed, 7 insertions, 4 deletions
diff --git a/gcc/hash-map.h b/gcc/hash-map.h index 63fa21c..e6ca9cf 100644 --- a/gcc/hash-map.h +++ b/gcc/hash-map.h @@ -173,8 +173,9 @@ public: if (ins) { e->m_key = k; - new ((void *) &e->m_value) Value (v); - gcc_checking_assert (!Traits::is_empty (*e)); + new ((void *)&e->m_value) Value (v); + gcc_checking_assert (!Traits::is_empty (*e) + && !Traits::is_deleted (*e)); } else e->m_value = v; @@ -204,7 +205,8 @@ public: { e->m_key = k; new ((void *)&e->m_value) Value (); - gcc_checking_assert (!Traits::is_empty (*e)); + gcc_checking_assert (!Traits::is_empty (*e) + && !Traits::is_deleted (*e)); } if (existed != NULL) diff --git a/gcc/hash-set.h b/gcc/hash-set.h index a98121a..08e1851 100644 --- a/gcc/hash-set.h +++ b/gcc/hash-set.h @@ -61,7 +61,8 @@ public: { new (e) Key (k); // Catch attempts to insert e.g. a NULL pointer. - gcc_checking_assert (!Traits::is_empty (*e)); + gcc_checking_assert (!Traits::is_empty (*e) + && !Traits::is_deleted (*e)); } return existed; |