intel/ir: Fix invalid type aliasing with undefined behavior in test_eu_compact.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 26 Jan 2018 19:48:02 +0000 (11:48 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Tue, 27 Feb 2018 19:42:39 +0000 (11:42 -0800)
commitcb309d27c52e9a6eeeedbddb82a0f6eb75a6f263
tree26876a8343d5d645773fd5dda9d9ace97724abaa
parent69b4a9d21d00e1f72b52e818cc059ee1642f263e
intel/ir: Fix invalid type aliasing with undefined behavior in test_eu_compact.

test_fuzz_compact_instruction() was attempting to modify the uint64_t
data array of a brw_inst through a pointer to uint32_t, which has
undefined behavior.  This was causing the test_eu_compact unit test to
fail mysteriously for me on GCC 7 with some additional
harmless-looking changes I had applied to my tree, which happened to
affect the order instructions are emitted by GCC causing the bit
twiddling to be done after the clear_pad_bits() call which is supposed
to overwrite the same data through a pointer of different type,
leading to data corruption.  A similar failure has been reported by
Vinson Lee on the master branch built with GCC 8.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105052
Tested-by: Vinson Lee <vlee@freedesktop.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/intel/compiler/test_eu_compact.cpp