On Fri, Jul 22, 2016 at 10:33:50AM -0400, David Malcolm wrote:
> gcc/cp/ChangeLog:
>       * parser.h (struct cp_token): Add a STATIC_ASSERT on the
>       size of the struct.
> ---
>  gcc/cp/parser.h | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/gcc/cp/parser.h b/gcc/cp/parser.h
> index ccbace9..8c1de57 100644
> --- a/gcc/cp/parser.h
> +++ b/gcc/cp/parser.h
> @@ -71,6 +71,15 @@ struct GTY (()) cp_token {
>              "|| (%1.type == CPP_DECLTYPE)"))) u;
>  };
>  
> +/* The C++ frontend lexes everything first, and keeps the tokens
> +   in memory, so there are possibly millions of tokens in memory.
> +   Ensure that we don't accidentally grow the structure.  */
> +STATIC_ASSERT (sizeof (cp_token) ==
> +            (2 // "type" and "keyword"
> +             + 1 // "flags"
> +             + 1 // bitfields
> +             + 4 // location_t
> +             + sizeof (void *))); // union

Doesn't that assume way too much on the host data layout?
This can be compiled with weirdo system compilers or on weirdo hosts,
I bet we don't really support non-8-bit char hosts, but still this might
break somewhere...

The formatting is wrong BTW, == shouldn't appear at the end of line.

        Jakub

Reply via email to