mirror of git://gcc.gnu.org/git/gcc.git
Add ability to force lexed tokens' source_locations.
Use it to force BUILTINS_LOCATION when declaring builtins instead of creating a <built-in> entry in the line_table which is wrong. * c-opts.c (c_finish_options): Force BUILTINS_LOCATION for tokens defined in cpp_init_builtins and c_cpp_builtins. gcc/fortran/ChangeLog * cpp.c (gfc_cpp_init): Force BUILTINS_LOCATION for tokens defined in cpp_define_builtins. libcpp/ChangeLog * init.c (cpp_create_reader): Inititalize forced_token_location_p. * internal.h (struct cpp_reader): Add field forced_token_location_p. * lex.c (_cpp_lex_direct): Use forced_token_location_p. (cpp_force_token_locations): New. (cpp_stop_forcing_token_locations): New. From-SVN: r177973
This commit is contained in:
parent
c4831cff11
commit
e3dfef44ef
|
@ -1,3 +1,8 @@
|
||||||
|
011-08-22 Gabriel Charette <gchare@google.com>
|
||||||
|
|
||||||
|
* c-opts.c (c_finish_options): Force BUILTINS_LOCATION for tokens
|
||||||
|
defined in cpp_init_builtins and c_cpp_builtins.
|
||||||
|
|
||||||
2011-08-19 Joseph Myers <joseph@codesourcery.com>
|
2011-08-19 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* c-common.c (c_common_reswords): Add __builtin_complex.
|
* c-common.c (c_common_reswords): Add __builtin_complex.
|
||||||
|
|
|
@ -1306,12 +1306,17 @@ c_finish_options (void)
|
||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
cb_file_change (parse_in,
|
{
|
||||||
linemap_add (line_table, LC_RENAME, 0,
|
/* Make sure all of the builtins about to be declared have
|
||||||
_("<built-in>"), 0));
|
BUILTINS_LOCATION has their source_location. */
|
||||||
|
source_location builtins_loc = BUILTINS_LOCATION;
|
||||||
|
cpp_force_token_locations (parse_in, &builtins_loc);
|
||||||
|
|
||||||
cpp_init_builtins (parse_in, flag_hosted);
|
cpp_init_builtins (parse_in, flag_hosted);
|
||||||
c_cpp_builtins (parse_in);
|
c_cpp_builtins (parse_in);
|
||||||
|
|
||||||
|
cpp_stop_forcing_token_locations (parse_in);
|
||||||
|
}
|
||||||
|
|
||||||
/* We're about to send user input to cpplib, so make it warn for
|
/* We're about to send user input to cpplib, so make it warn for
|
||||||
things that we previously (when we sent it internal definitions)
|
things that we previously (when we sent it internal definitions)
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2011-08-22 Gabriel Charette <gchare@google.com>
|
||||||
|
|
||||||
|
* cpp.c (gfc_cpp_init): Force BUILTINS_LOCATION for tokens
|
||||||
|
defined in cpp_define_builtins.
|
||||||
|
|
||||||
2011-08-22 Mikael Morin <mikael.morin@gcc.gnu.org>
|
2011-08-22 Mikael Morin <mikael.morin@gcc.gnu.org>
|
||||||
|
|
||||||
PR fortran/50050
|
PR fortran/50050
|
||||||
|
|
|
@ -565,9 +565,17 @@ gfc_cpp_init (void)
|
||||||
if (gfc_option.flag_preprocessed)
|
if (gfc_option.flag_preprocessed)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cpp_change_file (cpp_in, LC_RENAME, _("<built-in>"));
|
|
||||||
if (!gfc_cpp_option.no_predefined)
|
if (!gfc_cpp_option.no_predefined)
|
||||||
cpp_define_builtins (cpp_in);
|
{
|
||||||
|
/* 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_define_builtins (cpp_in);
|
||||||
|
|
||||||
|
cpp_stop_forcing_token_locations (cpp_in);
|
||||||
|
}
|
||||||
|
|
||||||
/* Handle deferred options from command-line. */
|
/* Handle deferred options from command-line. */
|
||||||
cpp_change_file (cpp_in, LC_RENAME, _("<command-line>"));
|
cpp_change_file (cpp_in, LC_RENAME, _("<command-line>"));
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2011-08-22 Gabriel Charette <gchare@google.com>
|
||||||
|
|
||||||
|
* init.c (cpp_create_reader): Inititalize forced_token_location_p.
|
||||||
|
* internal.h (struct cpp_reader): Add field forced_token_location_p.
|
||||||
|
* lex.c (_cpp_lex_direct): Use forced_token_location_p.
|
||||||
|
(cpp_force_token_locations): New.
|
||||||
|
(cpp_stop_forcing_token_locations): New.
|
||||||
|
|
||||||
2011-08-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
2011-08-18 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||||
|
|
||||||
PR libstdc++/1773
|
PR libstdc++/1773
|
||||||
|
|
|
@ -989,4 +989,8 @@ extern void cpp_prepare_state (cpp_reader *, struct save_macro_data **);
|
||||||
extern int cpp_read_state (cpp_reader *, const char *, FILE *,
|
extern int cpp_read_state (cpp_reader *, const char *, FILE *,
|
||||||
struct save_macro_data *);
|
struct save_macro_data *);
|
||||||
|
|
||||||
|
/* In lex.c */
|
||||||
|
extern void cpp_force_token_locations (cpp_reader *, source_location *);
|
||||||
|
extern void cpp_stop_forcing_token_locations (cpp_reader *);
|
||||||
|
|
||||||
#endif /* ! LIBCPP_CPPLIB_H */
|
#endif /* ! LIBCPP_CPPLIB_H */
|
||||||
|
|
|
@ -223,6 +223,9 @@ cpp_create_reader (enum c_lang lang, hash_table *table,
|
||||||
/* Initialize table for push_macro/pop_macro. */
|
/* Initialize table for push_macro/pop_macro. */
|
||||||
pfile->pushed_macros = 0;
|
pfile->pushed_macros = 0;
|
||||||
|
|
||||||
|
/* Do not force token locations by default. */
|
||||||
|
pfile->forced_token_location_p = NULL;
|
||||||
|
|
||||||
/* The expression parser stack. */
|
/* The expression parser stack. */
|
||||||
_cpp_expand_op_stack (pfile);
|
_cpp_expand_op_stack (pfile);
|
||||||
|
|
||||||
|
|
|
@ -499,6 +499,10 @@ struct cpp_reader
|
||||||
|
|
||||||
/* List of saved macros by push_macro. */
|
/* List of saved macros by push_macro. */
|
||||||
struct def_pragma_macro *pushed_macros;
|
struct def_pragma_macro *pushed_macros;
|
||||||
|
|
||||||
|
/* If non-null, the lexer will use this location for the next token
|
||||||
|
instead of getting a location from the linemap. */
|
||||||
|
source_location *forced_token_location_p;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Character classes. Based on the more primitive macros in safe-ctype.h.
|
/* Character classes. Based on the more primitive macros in safe-ctype.h.
|
||||||
|
|
25
libcpp/lex.c
25
libcpp/lex.c
|
@ -1975,8 +1975,11 @@ _cpp_lex_direct (cpp_reader *pfile)
|
||||||
}
|
}
|
||||||
c = *buffer->cur++;
|
c = *buffer->cur++;
|
||||||
|
|
||||||
result->src_loc = linemap_position_for_column (pfile->line_table,
|
if (pfile->forced_token_location_p)
|
||||||
CPP_BUF_COLUMN (buffer, buffer->cur));
|
result->src_loc = *pfile->forced_token_location_p;
|
||||||
|
else
|
||||||
|
result->src_loc = linemap_position_for_column (pfile->line_table,
|
||||||
|
CPP_BUF_COLUMN (buffer, buffer->cur));
|
||||||
|
|
||||||
switch (c)
|
switch (c)
|
||||||
{
|
{
|
||||||
|
@ -2839,3 +2842,21 @@ cpp_token_val_index (cpp_token *tok)
|
||||||
return CPP_TOKEN_FLD_NONE;
|
return CPP_TOKEN_FLD_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
cpp_stop_forcing_token_locations is called for R. */
|
||||||
|
|
||||||
|
void
|
||||||
|
cpp_force_token_locations (cpp_reader *r, source_location *p)
|
||||||
|
{
|
||||||
|
r->forced_token_location_p = p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Go back to assigning locations naturally for lexed tokens. */
|
||||||
|
|
||||||
|
void
|
||||||
|
cpp_stop_forcing_token_locations (cpp_reader *r)
|
||||||
|
{
|
||||||
|
r->forced_token_location_p = NULL;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue