Revert: 2016-01-28 Jakub Jelinek * directives.c (destringize_and_run): Adjust prototype. 2016-01-27 David Malcolm PR preprocessor/69126 * directives.c (destringize_and_run): Add expansion_loc param; use it when handling unexpanded pragmas to fixup the locations of the synthesized tokens. (_cpp_do__Pragma): Add expansion_loc param and use it when calling destringize_and_run. * internal.h (_cpp_do__Pragma): Add expansion_loc param. * macro.c (builtin_macro): Pass expansion location of _Pragma to _cpp_do__Pragma. --- libcpp/macro.c (revision 232893) +++ libcpp/macro.c (revision 232892) @@ -430,7 +430,7 @@ builtin_macro (cpp_reader *pfile, cpp_ha if (pfile->state.in_directive) return 0; - return _cpp_do__Pragma (pfile, loc); + return _cpp_do__Pragma (pfile); } buf = _cpp_builtin_macro_text (pfile, node); --- libcpp/directives.c (revision 232928) +++ libcpp/directives.c (revision 232892) @@ -122,8 +122,7 @@ static void do_pragma_error (cpp_reader static void do_linemarker (cpp_reader *); static const cpp_token *get_token_no_padding (cpp_reader *); static const cpp_token *get__Pragma_string (cpp_reader *); -static void destringize_and_run (cpp_reader *, const cpp_string *, - source_location); +static void destringize_and_run (cpp_reader *, const cpp_string *); static int parse_answer (cpp_reader *, struct answer **, int, source_location); static cpp_hashnode *parse_assertion (cpp_reader *, struct answer **, int); static struct answer ** find_answer (cpp_hashnode *, const struct answer *); @@ -1753,8 +1752,7 @@ get__Pragma_string (cpp_reader *pfile) /* Destringize IN into a temporary buffer, by removing the first \ of \" and \\ sequences, and process the result as a #pragma directive. */ static void -destringize_and_run (cpp_reader *pfile, const cpp_string *in, - source_location expansion_loc) +destringize_and_run (cpp_reader *pfile, const cpp_string *in) { const unsigned char *src, *limit; char *dest, *result; @@ -1834,12 +1832,6 @@ destringize_and_run (cpp_reader *pfile, toks = XRESIZEVEC (cpp_token, toks, maxcount); } toks[count] = *cpp_get_token (pfile); - /* _Pragma is a builtin, so we're not within a macro-map, and so - the token locations are set to bogus ordinary locations - near to, but after that of the "_Pragma". - Paper over this by setting them equal to the location of the - _Pragma itself (PR preprocessor/69126). */ - toks[count].src_loc = expansion_loc; /* Macros have been already expanded by cpp_get_token if the pragma allowed expansion. */ toks[count++].flags |= NO_EXPAND; @@ -1874,14 +1866,14 @@ destringize_and_run (cpp_reader *pfile, /* Handle the _Pragma operator. Return 0 on error, 1 if ok. */ int -_cpp_do__Pragma (cpp_reader *pfile, source_location expansion_loc) +_cpp_do__Pragma (cpp_reader *pfile) { const cpp_token *string = get__Pragma_string (pfile); pfile->directive_result.type = CPP_PADDING; if (string) { - destringize_and_run (pfile, &string->val.str, expansion_loc); + destringize_and_run (pfile, &string->val.str); return 1; } cpp_error (pfile, CPP_DL_ERROR, --- libcpp/internal.h (revision 232893) +++ libcpp/internal.h (revision 232892) @@ -688,7 +688,7 @@ extern int _cpp_handle_directive (cpp_re extern void _cpp_define_builtin (cpp_reader *, const char *); extern char ** _cpp_save_pragma_names (cpp_reader *); extern void _cpp_restore_pragma_names (cpp_reader *, char **); -extern int _cpp_do__Pragma (cpp_reader *, source_location); +extern int _cpp_do__Pragma (cpp_reader *); extern void _cpp_init_directives (cpp_reader *); extern void _cpp_init_internal_pragmas (cpp_reader *); extern void _cpp_do_file_change (cpp_reader *, enum lc_reason, const char *,