glsl: Switch ast_type_qualifier to a 128-bit bitset.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 12 Feb 2018 22:18:15 +0000 (14:18 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Sat, 24 Feb 2018 23:28:36 +0000 (15:28 -0800)
commitba79a90fb52e1e81fbfb38113e85a56b13497c50
tree856b9cd6e20c61dc6cf8defc58b4f1af752ff6b4
parentbdbc2ffa4219b39e47a27decbc603d445286d92d
glsl: Switch ast_type_qualifier to a 128-bit bitset.

This should end the drought of bits in the ast_type_qualifier object.
The bitset_t type works pretty much as a drop-in replacement for the
current uint64_t bitset.

The only catch is that the bitset_t type as defined in the previous
commit doesn't have a trivial constructor (because it has a
user-defined constructor), so it cannot be used as union member
without providing a user-defined constructor for the union (which
causes it in turn to be non-trivially constructible).  This annoyance
could be easily addressed in C++11 by declaring the default
constructor of bitset_t to be the implicitly defined one -- IMO one
more reason to drop support for GCC 4.2-4.3.

The other minor change was required because glsl_parser_extras.cpp was
hard-coding the type of bitset temporaries as uint64_t, which (unlike
would have been the case if the uint64_t had been replaced with
e.g. an __int128) would otherwise have caused a build failure, because
the boolean conversion operator of bitset_t is marked explicit (if
C++11 is available), so the bitset won't be silently truncated down to
1 bit in order to use it to initialize the uint64_t temporaries
(yikes).

Reviewed-by: Plamena Manolova <plamena.manolova@intel.com>
src/compiler/glsl/ast.h
src/compiler/glsl/glsl_parser.yy
src/compiler/glsl/glsl_parser_extras.cpp