bt_uuid_t is defined as a byte array, so it can cause alignment errors on some architectures, when the two 64 bit halves are treated as u64s. This patch ensures proper alignment across all architectures. Fixes: src/adapter.c: In function ‘bt_uuid_hash’: src/adapter.c:3617:8: error: cast increases required alignment of target type [-Werror=cast-align] val = (uint64_t *)&uuid_128.value.u128; ^ cc1: all warnings being treated as errors --- src/adapter.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index afefa1d5d..c8b3d27a7 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3607,16 +3607,14 @@ static void add_uuid_to_uuid_set(void *data, void *user_data) static guint bt_uuid_hash(gconstpointer key) { const bt_uuid_t *uuid = key; - bt_uuid_t uuid_128; - uint64_t *val; + uint64_t uuid_128[2]; if (!uuid) return 0; - bt_uuid_to_uuid128(uuid, &uuid_128); - val = (uint64_t *)&uuid_128.value.u128; + bt_uuid_to_uuid128(uuid, (bt_uuid_t *)uuid_128); - return g_int64_hash(val) ^ g_int64_hash(val+1); + return g_int64_hash(uuid_128) ^ g_int64_hash(uuid_128+1); } static gboolean bt_uuid_equal(gconstpointer v1, gconstpointer v2) -- 2.36.1