On Fri, Dec 22, 2017 at 7:34 PM, Paolo Carlini <paolo.carl...@oracle.com> wrote: > in this error recovery issue cp_check_const_attributes and more generally > cplus_decl_attributes have lots of troubles handling the error_mark_node > returned by cp_parser_std_attribute_spec_seq, as called by > cp_parser_direct_declarator. I fiddled quite a bit with these parsing > facilities to eventually notice that boldly changing > cp_parser_std_attribute_spec_seq to return NULL_TREE instead of > error_mark_node when cp_parser_std_attribute_spec returns error_mark_node in > the loop cures the bug at issue as a special case.
Hmm, I'm skeptical. In general, we want to use error_mark_node to distinguish between something not being there and being there but wrong. > I also noticed that in cp_parser_std_attribute_spec we are using > token_pair::require_open / require_close very peculiarly, issuing a > cp_parser_error when the returned bool is false instead of simply bailing > out with error_mark_node and that in fact causes duplicate diagnostics about > expected '(' / ')', respectively. The hunks for this issue are OK. Jason