Mesa (main): microsoft/compiler: Use memcpy instead of a union to write dxil_features

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Oct 26 20:40:00 UTC 2021


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

Author: Michael Tang <tangm at microsoft.com>
Date:   Fri Oct 22 16:03:11 2021 -0700

microsoft/compiler: Use memcpy instead of a union to write dxil_features

Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13496>

---

 src/microsoft/compiler/dxil_container.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/microsoft/compiler/dxil_container.c b/src/microsoft/compiler/dxil_container.c
index e8373fb93ab..2e2c44558cb 100644
--- a/src/microsoft/compiler/dxil_container.c
+++ b/src/microsoft/compiler/dxil_container.c
@@ -72,11 +72,12 @@ bool
 dxil_container_add_features(struct dxil_container *c,
                             const struct dxil_features *features)
 {
-   union {
-      struct dxil_features flags;
-      uint64_t bits;
-   } u = { .flags = *features };
-   return add_part(c, DXIL_SFI0, &u.bits, sizeof(u.bits));
+   /* DXIL feature info is a bitfield packed into a uint64_t. */
+   static_assert(sizeof(struct dxil_features) <= sizeof(uint64_t),
+                 "Expected dxil_features to fit into a uint64_t");
+   uint64_t bits = 0;
+   memcpy(&bits, features, sizeof(struct dxil_features));
+   return add_part(c, DXIL_SFI0, &bits, sizeof(uint64_t));
 }
 
 typedef struct {



More information about the mesa-commit mailing list