From: Nicolai Hähnle <nicolai.haeh...@amd.com> This fixes a regression introduced by commit d8d6091a8.
Heap allocations may be only 8-byte aligned on 32-bit system, and so having members with 16-byte alignment (such as in the case where pipe_blend_color is embedded in radeonsi's si_context) is undefined behavior which indeed causes crashes when compiled with gcc -O3. Rather than track down and fix all allocation sites where a pipe_blend_color may be embedded, assume that the original compiler bug only affects 64-bits. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96835 Cc: Tim Rowley <timothy.o.row...@intel.com> Cc: Chuck Atkins <chuck.atk...@kitware.com> Cc: <mesa-sta...@lists.freedesktop.org> -- This should fix the linked bug report. The big question is whether the assumption about the original compiler problem is correct? --- src/gallium/include/pipe/p_state.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h index a73a771..1986495 100644 --- a/src/gallium/include/pipe/p_state.h +++ b/src/gallium/include/pipe/p_state.h @@ -335,8 +335,13 @@ struct pipe_blend_color * unaligned accessors resulting in a segfault. Specifically several * versions of the Intel compiler are known to be affected but it's likely * others are as well. + * + * This only applies on 64-bit architectures, and adding the alignment on + * 32-bit architectures causes bugs because heap allocations are not + * sufficiently aligned. */ - PIPE_ALIGN_VAR(16) float color[4]; + PIPE_ALIGN_VAR(sizeof(void *) >= 8 ? 16 : 4) + float color[4]; }; -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev