On Fri, Jul 22, 2016 at 12:44:07PM +0200, Marek Polacek wrote:
> --- gcc/gcc/cp/parser.h
> +++ gcc/gcc/cp/parser.h
> @@ -46,7 +46,7 @@ struct GTY (()) cp_token {
> Otherwise, this value is RID_MAX. */
> ENUM_BITFIELD (rid) keyword : 8;
> /* Token flags. */
> - unsigned char flags;
> + unsigned short flags;
> /* True if this token is from a context where it is implicitly extern "C"
> */
> BOOL_BITFIELD implicit_extern_c : 1;
> /* True if an error has already been reported for this token, such as a
I'm afraid this is really bad.
Right now, there are 8 and 8 bit bitfields, then 8-bit char, 3 individual
bits, 5 unused bits and 32-bit int, nicely packed into 64-bit word before a
union with pointer members, and the C++ FE lexes everything first, so there
are possibly millions of tokens in memory.
Can't you just make it unsigned int flags : 11; instead? Or instead
reshuffle the cpplib.h flags? E.g. I don't see the C++ FE to use the
NO_EXPAND flag, so moving it to the upper byte of the short and moving the
new flag to its bit? Perhaps that is even better for now.
Jakub