[Mesa-stable] [PATCH] glsl: change ast_type_qualifier bitset size to work around GCC 5.4 bug

Charmaine Lee charmainel at vmware.com
Tue May 8 15:58:43 UTC 2018


Looks good.
Also verified that the workaround fixes the crashes that are seen with VMware svga driver due to this bug.

Reviewed-by: Charmaine Lee <charmainel at vmware.com>

________________________________________
From: Brian Paul <brianp at vmware.com>
Sent: Tuesday, May 8, 2018 7:43:49 AM
To: mesa-dev at lists.freedesktop.org
Cc: Matt Turner; Kenneth Graunke; Charmaine Lee; mesa-stable at lists.freedesktop.org
Subject: [PATCH] glsl: change ast_type_qualifier bitset size to work around GCC 5.4 bug

Change the size of the bitset from 128 bits to 96.  This works around an
apparent GCC 5.4 bug in which bad SSE code is generated, leading to a
crash in ast_type_qualifier::validate_in_qualifier() (ast_type.cpp:654).

This can be repro'd with the Piglit test tests/spec/glsl-1.50/execution/
varying-struct-basic-gs-fs.shader_test

Bugzilla:https://bugs.freedesktop.org/show_bug.cgi?id=105497
Cc: mesa-stable at lists.freedesktop.org
---
 src/compiler/glsl/ast.h | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/compiler/glsl/ast.h b/src/compiler/glsl/ast.h
index a1ec0d5..9b88ff5 100644
--- a/src/compiler/glsl/ast.h
+++ b/src/compiler/glsl/ast.h
@@ -474,7 +474,13 @@ enum {

 struct ast_type_qualifier {
    DECLARE_RALLOC_CXX_OPERATORS(ast_type_qualifier);
-   DECLARE_BITSET_T(bitset_t, 128);
+   /* Note: this bitset needs to have at least as many bits as the 'q'
+    * struct has flags, below.  Previously, the size was 128 instead of 96.
+    * But an apparent bug in GCC 5.4.0 causes bad SSE code generation
+    * elsewhere, leading to a crash.  96 bits works around the issue.
+    * See https://bugs.freedesktop.org/show_bug.cgi?id=105497
+    */
+   DECLARE_BITSET_T(bitset_t, 96);

    union flags {
       struct {
--
2.7.4



More information about the mesa-stable mailing list