On 09/28/2017 11:47 AM, Jakub Jelinek wrote:
I don't see the first half of 1) related to second half thereof, the
DECL_BIT_FIELD_REPRESENTATIVE is unrelated to the parsing bug, and a needed
precondition of 2).
That's very conscientious of you.
As I said on IRC, I hope [[/__attribute__/alignas early is rare enough that
the tentative parsing shouldn't be a big deal, if it is, we could add some
cheaper function that allows us to skip over attributes (return a peek
offset after the attributes given a starting peek offset).
I agree.
--- gcc/cp/parser.c.jj 2017-09-22 20:51:48.181537880 +0200
+++ gcc/cp/parser.c 2017-09-27 17:50:15.082792676 +0200
@@ -23443,35 +23443,64 @@ cp_parser_member_declaration (cp_parser*
/* Peek at the next token. */
token = cp_lexer_peek_token (parser->lexer);
+ if (cp_next_tokens_can_be_attribute_p (parser)
+ || (token->type == CPP_NAME
+ && cp_nth_tokens_can_be_attribute_p (parser, 2)
+ && (named_bitfld = true)))
+ {
Please insert a comment describing why we're doing the lookahead and our
supposition that it is rare, so the simplicity of a tentative parse is
worth the expense. Also, as I mentioned before, the other alternative
is to let the non-bitfield declarator parsing get an unnamed decl and
then look for the ':'. But that's a more complicated change we decided
not to do.
the mid-condition assignment is ugly, but probably the least ugly.
ok for trunk.
nathan
--
Nathan Sidwell