[PR c++/85039] no type definitions in builtin offsetof
authorAlexandre Oliva <aoliva@redhat.com>
Mon, 16 Apr 2018 21:35:34 +0000 (21:35 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Mon, 16 Apr 2018 21:35:34 +0000 (21:35 +0000)
commit7c5b407fa2f7dee7cfa663f7d5c4521fa4be00c8
tree67da6c84e9f4c9931dbc864c087f4b01d201ee64
parent34722c3669ee87bd6754d4346e12e822641b0cd7
[PR c++/85039] no type definitions in builtin offsetof

Types defined within a __builtin_offsetof argument don't always get
properly recorded as members of their context types, so if they're
anonymous, we may fail to assign them an anon type index for mangling
and ICE.

We shouldn't allow types to be introduced in __builtin_offsetof, I
think, and Jason says the std committee agrees, so I've arranged for
us to reject them.

Even then, we still parse the definitions and attempt to assign
mangled names to its member functions, so the ICE remains.  Since
we've already reported an error, we might as well complete the name
assignment with an arbitrary index, thus avoiding the ICE.

We used to have a test that expected to be able to define types in
__builtin_offsetof; this patch removes that specific test.

for  gcc/cp/ChangeLog

PR c++/85039
* parser.c (cp_parser_builtin_offset): Reject type definitions.
* mangle.c (nested_anon_class_index): Avoid crash returning -1
if we've seen errors.

for  gcc/testsuite/ChangeLog

PR c++/85039
* g++.dg/pr85039-1.C: New.
* g++.dg/pr85039-2.C: New.
* g++.dg/parse/semicolon3.C: Remove test_offsetof.

From-SVN: r259423
gcc/cp/ChangeLog
gcc/cp/mangle.c
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/semicolon3.C
gcc/testsuite/g++.dg/pr85039-1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/pr85039-2.C [new file with mode: 0644]