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

Reply via email to