From 75b81900d55bbde9d4859f5cf552f09c71fbdff1 Mon Sep 17 00:00:00 2001 From: David Detlefs Date: Thu, 18 Jun 2026 19:22:05 -0700 Subject: [PATCH] Fix "missing field initializer" warnings. --- cmake/compiler_warnings.cmake | 1 + src/util/map.h | 10 +++++----- src/util/obj_hashtable.h | 19 ++++++++++++------- src/util/symbol_table.h | 8 ++++++-- 4 files changed, 24 insertions(+), 14 deletions(-) diff --git a/cmake/compiler_warnings.cmake b/cmake/compiler_warnings.cmake index 38b442e83..f6529c21a 100644 --- a/cmake/compiler_warnings.cmake +++ b/cmake/compiler_warnings.cmake @@ -23,6 +23,7 @@ set(CLANG_ONLY_WARNINGS "-Wc99-extensions" "-Wsuggest-override" "-Winconsistent-missing-override" + "-Wmissing-field-initializers" ) set(MSVC_WARNINGS "/W3") diff --git a/src/util/map.h b/src/util/map.h index fb72db01f..f6fe38ec2 100644 --- a/src/util/map.h +++ b/src/util/map.h @@ -115,7 +115,7 @@ public: } entry * find_core(key const & k) const { - return m_table.find_core(key_data{k}); + return m_table.find_core(key_data{k, value()}); } bool find(key const & k, value & v) const { @@ -137,7 +137,7 @@ public: } iterator find_iterator(key const & k) const { - return m_table.find(key_data{k}); + return m_table.find(key_data{k, value()}); } value const & find(key const& k) const { @@ -161,10 +161,10 @@ public: return find_core(k) != nullptr; } - void remove(key const & k) { - m_table.remove(key_data{k}); + void remove(key const &k) { + m_table.remove(key_data{k, value()}); } - + void erase(key const & k) { remove(k); } diff --git a/src/util/obj_hashtable.h b/src/util/obj_hashtable.h index 0b39163ea..ae2a54f04 100644 --- a/src/util/obj_hashtable.h +++ b/src/util/obj_hashtable.h @@ -62,6 +62,11 @@ public: struct key_data { Key * m_key = nullptr; Value m_value; + + key_data() : m_key(nullptr), m_value(Value()) {} + key_data(Key * key) : m_key(key), m_value(Value()) {} + key_data(Key * key, const Value& value) : m_key(key), m_value(value) {} + Value const & get_value() const { return m_value; } Key & get_key () const { return *m_key; } unsigned hash() const { return m_key->hash(); } @@ -156,8 +161,8 @@ public: obj_map_entry * insert_if_not_there3(Key * k, Value const & v) { return m_table.insert_if_not_there2({k, v}); } - - obj_map_entry * find_core(Key * k) const { + + obj_map_entry *find_core(Key *k) const { return m_table.find_core({k}); } @@ -188,8 +193,8 @@ public: value & operator[](key * k) { return find(k); } - - iterator find_iterator(Key * k) const { + + iterator find_iterator(Key *k) const { return m_table.find(key_data{k}); } @@ -197,10 +202,10 @@ public: return find_core(k) != nullptr; } - void remove(Key * k) { - m_table.remove(key_data{k}); + void remove(Key *k) { + m_table.remove(key_data{k, value()}); } - + void erase(Key * k) { remove(k); } diff --git a/src/util/symbol_table.h b/src/util/symbol_table.h index c6dbb9f82..079f6357c 100644 --- a/src/util/symbol_table.h +++ b/src/util/symbol_table.h @@ -30,6 +30,10 @@ class symbol_table { struct key_data { symbol m_key; T m_data; + + key_data() {} + key_data(const symbol &key) : m_key(key) {} + key_data(const symbol &key, const T &data) : m_key(key), m_data(data) {} }; struct key_data_hash_proc { @@ -116,8 +120,8 @@ public: result = e->get_data().m_data; return true; } - - bool contains(symbol key) const { + + bool contains(symbol key) const { return m_sym_table.contains(key_data{key}); }