Mesa (master): mesa/st: fix strict aliasing issue in int64 code.

Dave Airlie airlied at kemper.freedesktop.org
Wed Feb 8 02:15:18 UTC 2017


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Feb  8 01:23:00 2017 +0000

mesa/st: fix strict aliasing issue in int64 code.

This fixes the int64 code same as the double code.

Reviewed-by: Timothy Arceri <t_arceri at yahoo.com.au>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 77a51d5..116f30c 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -3363,15 +3363,13 @@ glsl_to_tgsi_visitor::visit(ir_constant *ir)
    case GLSL_TYPE_INT64:
       gl_type = GL_INT64_ARB;
       for (i = 0; i < ir->type->vector_elements; i++) {
-         values[i * 2].i = *(uint32_t *)&ir->value.d[i];
-         values[i * 2 + 1].i = *(((uint32_t *)&ir->value.d[i]) + 1);
+         memcpy(&values[i * 2], &ir->value.d[i], sizeof(int64_t));
       }
       break;
    case GLSL_TYPE_UINT64:
       gl_type = GL_UNSIGNED_INT64_ARB;
       for (i = 0; i < ir->type->vector_elements; i++) {
-         values[i * 2].i = *(uint32_t *)&ir->value.d[i];
-         values[i * 2 + 1].i = *(((uint32_t *)&ir->value.d[i]) + 1);
+         memcpy(&values[i * 2], &ir->value.d[i], sizeof(uint64_t));
       }
       break;
    case GLSL_TYPE_UINT:




More information about the mesa-commit mailing list