On Fri, Jul 22, 2016 at 4:11 PM, Jakub Jelinek <ja...@redhat.com> wrote:
> 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.

Maybe restrict it to __GNUC__ and __x86_64__ or so.

Richard.

>         Jakub

Reply via email to