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