Mesa (main): util/u_vector: prevent C++ warning on cast from void* to something else

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Dec 7 20:22:44 UTC 2021


Module: Mesa
Branch: main
Commit: a3886fa471f0b68229bc1642a39c869023c3f014
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a3886fa471f0b68229bc1642a39c869023c3f014

Author: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Date:   Sun Nov 28 21:33:36 2021 +0200

util/u_vector: prevent C++ warning on cast from void* to something else

v2: fix windows build

v3: duplicate foreach macro for C/C++

v4: Extract casting macro

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Dylan Baker <dylan at pnwbakers.com> (v3)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13997>

---

 src/util/u_vector.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/util/u_vector.h b/src/util/u_vector.h
index 1283e78b70c..f13fd72ed16 100644
--- a/src/util/u_vector.h
+++ b/src/util/u_vector.h
@@ -98,10 +98,18 @@ u_vector_finish(struct u_vector *queue)
    free(queue->data);
 }
 
+#ifdef __cplusplus
+#define u_vector_element_cast(elem) (decltype(elem))
+#else
+#define u_vector_element_cast(elem) (void *)
+#endif
+
 #define u_vector_foreach(elem, queue)                                  \
    STATIC_ASSERT(__builtin_types_compatible_p(__typeof__(queue), struct u_vector *)); \
    for (uint32_t __u_vector_offset = (queue)->tail;                                \
-        elem = (void *)((char *)(queue)->data + (__u_vector_offset & ((queue)->size - 1))), __u_vector_offset != (queue)->head; \
+        elem = u_vector_element_cast(elem)((char *)(queue)->data + \
+                                           (__u_vector_offset & ((queue)->size - 1))), \
+           __u_vector_offset != (queue)->head;                          \
         __u_vector_offset += (queue)->element_size)
 
 #ifdef __cplusplus



More information about the mesa-commit mailing list