It also fixes the errors that I was getting with gcc 5.4.0 with configure build on ubuntu 16.04.
Tested-By: George Kyriazis <george.kyria...@intel.com<mailto:george.kyria...@intel.com>> On Feb 25, 2018, at 6:52 PM, Roland Scheidegger <srol...@vmware.com<mailto:srol...@vmware.com>> wrote: Am 25.02.2018 um 21:12 schrieb Francisco Jerez: Roland Scheidegger <srol...@vmware.com<mailto:srol...@vmware.com>> writes: Am 25.02.2018 um 03:35 schrieb Francisco Jerez: Roland Scheidegger <srol...@vmware.com<mailto:srol...@vmware.com>> writes: This seems to have broken compilation with some gcc versions (with scons build): In file included from src/compiler/glsl/ast_array_index.cpp:24:0: src/compiler/glsl/ast.h:648:16: error: member ‘ast_type_qualifier::bitset_t ast_type_qualifier::flags::i’ with constructor not allowed in union bitset_t i; ^ Oops... And the only reason bitset_t has a default constructor was... to avoid using another C++11 feature (defaulted member functions). Does the attached patch fix the build failure for you? The cleaner alternative would be to define the default constructor of the bitset object like 'T() = default', but that would imply dropping support for GCC 4.2-4.3 which don't implement the feature... FWIW the compile error was happening with gcc 4.8 - I didn't see it with gcc 5.4. (I don't think at vmware we'd care about anything older than gcc 4.4 at least but last time someone wanted to bump gcc requirements there were still people requiring gcc 4.2.) The patch compiles albeit there's about two dozen warnings like the following: glsl/ast_type.cpp: In member function 'bool ast_fully_specified_type::has_qualifiers(_mesa_glsl_parse_state*) const': glsl/ast_type.cpp:50:67: warning: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second: [enabled by default] return (this->qualifier.flags.i & ~subroutine_only.flags.i) != 0; ^ In file included from glsl/ast.h:31:0, from glsl/ast_type.cpp:24: ../../src/util/bitset.h:181:7: note: candidate 1: bool operator!=(const ast_type_qualifier::bitset_t&, unsigned int) operator!=(const T &b, BITSET_WORD x) \ ^ glsl/ast.h:477:4: note: in expansion of macro 'DECLARE_BITSET_T' DECLARE_BITSET_T(bitset_t, 128); ^ glsl/ast_type.cpp:50:67: note: candidate 2: operator!=(int, int) <built-in> return (this->qualifier.flags.i & ~subroutine_only.flags.i) != 0; ^ Roland Ah, yeah, that's because I didn't provide overloads for signed integer types, but it should be harmless since the two candidates have the same semantics, and should go away with a C++11-capable compiler. I think the attached patch should shut the warnings on older compilers. Yes, that compiles without warnings (with gcc 4.8) Tested-by: Roland Scheidegger <srol...@vmware.com<mailto:srol...@vmware.com>> src/compiler/glsl/ast.h:648:16: note: unrestricted unions only available with -std=c++11 or -std=gnu++11 scons: *** [build/linux-x86_64-checked/compiler/glsl/ast_array_index.os] Error 1 src/gallium/tests/unit/u_format_test.c: In function ‘main’: src/gallium/tests/unit/u_format_test.c:649:44: warning: array subscript is above array bounds [-Warray-bounds] unpacked[i][j] = test->unpacked[i][j][1]; ^ In file included from src/compiler/glsl/ast_expr.cpp:24:0: src/compiler/glsl/ast.h:648:16: error: member ‘ast_type_qualifier::bitset_t ast_type_qualifier::flags::i’ with constructor not allowed in union bitset_t i; ^ src/compiler/glsl/ast.h:648:16: note: unrestricted unions only available with -std=c++11 or -std=gnu++11 Roland [...] _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org<mailto:mesa-dev@lists.freedesktop.org> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev