c++: error recovery & pragmas
Parser error recovery can get confused by the tokens within a deferred
pragma, as treats those as regular tokens.  This adjusts the recovery
so that the pragma is treated as a unit.  Also, the preprocessor now
ensures that we never have an EOF token inside a pragma -- the pragma
is always closed first.
	gcc/cp/
	* parser.c (cp_parser_skip_to_closing_parenthesis_1): Deal with
	meeting a deferred pragma.
	(cp_parser_skip_to_end_of_statement): Likewise.
	(cp_parser_skip_to_end_of_block_or_statement): Likewise.
	(cp_parser_skip_to_pragma_eol): We should never meet EOF.
	(cp_parser_omp_declare_simd): Likewise.
	(cp_parser_omp_declare_reduction, cp_parser_oacc_routine)
	(pragma_lex): Likewise.
	gcc/testsuite/
	* g++.dg/parse/pragma-recovery.C: New.