Skip to content

Commit

Permalink
[6/6] Preprocessor forced macro location
Browse files Browse the repository at this point in the history
https://gcc.gnu.org/ml/gcc-patches/2018-10/msg02044.html
	libcpp/
	* internal.h (struct cpp_reader): Rename forced_token_location_p
	to forced_token_location and drop its pointerness.
	* include/cpplib.h (cpp_force_token_locations): Take location, not
	pointer to one.
	* init.c (cpp_create_reader): Adjust.
	* lex.c (cpp_read_main_file): 

	gcc/c-family/
	* c-opts.c (c_finish_options): Adjust cpp_force_token_locations call.

	gcc/fortran/
	* cpp.c (gfc_cpp_init): Adjust cpp_force_token_locations call.

From-SVN: r265692
  • Loading branch information
urnathan authored and Nathan Sidwell committed Oct 31, 2018
1 parent 82a1444 commit f3f6029
Show file tree
Hide file tree
Showing 9 changed files with 28 additions and 15 deletions.
4 changes: 4 additions & 0 deletions gcc/c-family/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2018-10-31 Nathan Sidwell <[email protected]>

* c-opts.c (c_finish_options): Adjust cpp_force_token_locations call.

2018-10-30 Martin Sebor <[email protected]>

PR middle-end/87041
Expand Down
3 changes: 1 addition & 2 deletions gcc/c-family/c-opts.c
Original file line number Diff line number Diff line change
Expand Up @@ -1396,8 +1396,7 @@ c_finish_options (void)
0)));
/* Make sure all of the builtins about to be declared have
BUILTINS_LOCATION has their source_location. */
source_location builtins_loc = BUILTINS_LOCATION;
cpp_force_token_locations (parse_in, &builtins_loc);
cpp_force_token_locations (parse_in, BUILTINS_LOCATION);

cpp_init_builtins (parse_in, flag_hosted);
c_cpp_builtins (parse_in);
Expand Down
4 changes: 4 additions & 0 deletions gcc/fortran/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2018-10-31 Nathan Sidwell <[email protected]>

* cpp.c (gfc_cpp_init): Adjust cpp_force_token_locations call.

2018-10-31 Martin Liska <[email protected]>

* trans-decl.c (struct module_hasher): Call htab_hash_string
Expand Down
3 changes: 1 addition & 2 deletions gcc/fortran/cpp.c
Original file line number Diff line number Diff line change
Expand Up @@ -579,8 +579,7 @@ gfc_cpp_init (void)
{
/* Make sure all of the builtins about to be declared have
BUILTINS_LOCATION has their source_location. */
source_location builtins_loc = BUILTINS_LOCATION;
cpp_force_token_locations (cpp_in, &builtins_loc);
cpp_force_token_locations (cpp_in, BUILTINS_LOCATION);

cpp_define_builtins (cpp_in);

Expand Down
7 changes: 7 additions & 0 deletions libcpp/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
2018-10-31 Nathan Sidwell <[email protected]>

* internal.h (struct cpp_reader): Rename forced_token_location_p
to forced_token_location and drop its pointerness.
* include/cpplib.h (cpp_force_token_locations): Take location, not
pointer to one.
* init.c (cpp_create_reader): Adjust.
* lex.c (cpp_read_main_file):

* directives.c (do_include_common): Commonize cleanup path.
(_cpp_pop_buffer): Fix leak.

Expand Down
2 changes: 1 addition & 1 deletion libcpp/include/cpplib.h
Original file line number Diff line number Diff line change
Expand Up @@ -1281,7 +1281,7 @@ extern int cpp_read_state (cpp_reader *, const char *, FILE *,
struct save_macro_data *);

/* In lex.c */
extern void cpp_force_token_locations (cpp_reader *, source_location *);
extern void cpp_force_token_locations (cpp_reader *, source_location);
extern void cpp_stop_forcing_token_locations (cpp_reader *);

/* In expr.c */
Expand Down
2 changes: 1 addition & 1 deletion libcpp/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ cpp_create_reader (enum c_lang lang, cpp_hash_table *table,
pfile->pushed_macros = 0;

/* Do not force token locations by default. */
pfile->forced_token_location_p = NULL;
pfile->forced_token_location = 0;

/* Initialize source_date_epoch to -2 (not yet set). */
pfile->source_date_epoch = (time_t) -2;
Expand Down
4 changes: 2 additions & 2 deletions libcpp/internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -570,9 +570,9 @@ struct cpp_reader
/* List of saved macros by push_macro. */
struct def_pragma_macro *pushed_macros;

/* If non-null, the lexer will use this location for the next token
/* If non-zero, the lexer will use this location for the next token
instead of getting a location from the linemap. */
source_location *forced_token_location_p;
source_location forced_token_location;
};

/* Character classes. Based on the more primitive macros in safe-ctype.h.
Expand Down
14 changes: 7 additions & 7 deletions libcpp/lex.c
Original file line number Diff line number Diff line change
Expand Up @@ -2757,8 +2757,8 @@ _cpp_lex_direct (cpp_reader *pfile)
}
c = *buffer->cur++;

if (pfile->forced_token_location_p)
result->src_loc = *pfile->forced_token_location_p;
if (pfile->forced_token_location)
result->src_loc = pfile->forced_token_location;
else
result->src_loc = linemap_position_for_column (pfile->line_table,
CPP_BUF_COLUMN (buffer, buffer->cur));
Expand Down Expand Up @@ -3773,20 +3773,20 @@ cpp_token_val_index (const cpp_token *tok)
}
}

/* All tokens lexed in R after calling this function will be forced to have
their source_location the same as the location referenced by P, until
/* All tokens lexed in R after calling this function will be forced to
have their source_location to be P, until
cpp_stop_forcing_token_locations is called for R. */

void
cpp_force_token_locations (cpp_reader *r, source_location *p)
cpp_force_token_locations (cpp_reader *r, source_location loc)
{
r->forced_token_location_p = p;
r->forced_token_location = loc;
}

/* Go back to assigning locations naturally for lexed tokens. */

void
cpp_stop_forcing_token_locations (cpp_reader *r)
{
r->forced_token_location_p = NULL;
r->forced_token_location = 0;
}

0 comments on commit f3f6029

Please sign in to comment.