util/macros: Add ATTRIBUTE_NOINLINE definition for MSVC
[mesa.git] / src / util / set.c
index 4788b94324a3f00fe1dc318ef238e1ed12003048..ffe0fe808eadd8d24ec45d16b423b01b66159fdc 100644 (file)
@@ -92,6 +92,12 @@ static const struct {
    ENTRY(2147483648ul, 2362232233ul, 2362232231ul )
 };
 
+ASSERTED static inline bool
+key_pointer_is_reserved(const void *key)
+{
+   return key == NULL || key == deleted_key;
+}
+
 static int
 entry_is_free(struct set_entry *entry)
 {
@@ -214,6 +220,8 @@ _mesa_set_clear(struct set *set, void (*delete_function)(struct set_entry *entry
 static struct set_entry *
 set_search(const struct set *ht, uint32_t hash, const void *key)
 {
+   assert(!key_pointer_is_reserved(key));
+
    uint32_t size = ht->size;
    uint32_t start_address = util_fast_urem32(hash, size, ht->size_magic);
    uint32_t double_hash = util_fast_urem32(hash, ht->rehash,
@@ -337,6 +345,8 @@ set_search_or_add(struct set *ht, uint32_t hash, const void *key, bool *found)
 {
    struct set_entry *available_entry = NULL;
 
+   assert(!key_pointer_is_reserved(key));
+
    if (ht->entries >= ht->max_entries) {
       set_rehash(ht, ht->size_index + 1);
    } else if (ht->deleted_entries + ht->entries >= ht->max_entries) {