diff options
author | bothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-05 06:52:26 +0000 |
---|---|---|
committer | bothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-02-05 06:52:26 +0000 |
commit | d732fcf07665e7bbf25e86683c340207a742c7b3 (patch) | |
tree | a8cb79fee4ffa92207a17795cfa3750745b8d001 /gcc/c-opts.c | |
parent | a2383135f2a6bb2b6184b15c5e0beb5d117626f3 (diff) | |
download | gcc-d732fcf07665e7bbf25e86683c340207a742c7b3.tar.gz |
Partially revert/redo 2003-10-01 change; fix -fworking-directory.
* c-ppoutput.c (pp_dir_change): New function.
* c-common.h (pp_dir_change): New declaration.
* cpplib.h (struct cpp_options): Remove working_directory field.
* cppinit.c (cpp_find_main_file, cpp_push_main_file): Merge back to
(cpp_read_main_file): as before 10-01. Call _cpp_stack_file.
Don't handle -fworking_directory here, but in c_common_post_options.
(read_original_directory): Don't back up when done.
Don't clear no-longer used working_directory flag.
* cpplib.h: Update declarations to match.
* c-lex.c (cb_dir_change): Move to c-opts.c.
(init_c_lex): Don't set dir_change callback here, since we want
to set it even if flag_preprocess_only.
* c-opts.c (cb_dir_change): Function moved from c-lex.c.
(c_common_post_options): Set dir_change callback.
Call pp_dir_change if approporiate.
(finish_options): Don't call cpp_find_main_file here. Hence remove
unneeded parameter and result. Do LC_RENAME for <built-in>.
(c_common_post_options): Call cpp_read_main_file here instead.
(c_common_init): Update accordingly.
(push_command_line_include): Don't cpp_push_main_file.
Do LC_RENAME rather than LC_LEASE to get back to main file.
Compared to pre-10-01 version, inline cpp_rename_to_main_file.
(c_common_parse_file): Call cpp_read_main_file for subsequent main
files, but call finish_options for all files.
* c-opts.c (sanitize_cpp_opts): Don't set cpp_opts->working_directory.
* fix-header.c (read_scan_file): Call cpp_read_main_file instead of
cpp_find_main_file + cpp_push_main_file.
* c-lex.c (fe_file_change): Don't set main_input_filename here.
* opts.c (handle_options): Only set main_input_filename first time.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@77303 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-opts.c')
-rw-r--r-- | gcc/c-opts.c | 66 |
1 files changed, 41 insertions, 25 deletions
diff --git a/gcc/c-opts.c b/gcc/c-opts.c index c89ba0040e6..6fbfd1cee6c 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -108,7 +108,8 @@ static void sanitize_cpp_opts (void); static void add_prefixed_path (const char *, size_t); static void push_command_line_include (void); static void cb_file_change (cpp_reader *, const struct line_map *); -static bool finish_options (const char *); +static void cb_dir_change (cpp_reader *, const char *); +static void finish_options (void); #ifndef STDC_0_IN_SYSTEM_HEADERS #define STDC_0_IN_SYSTEM_HEADERS 0 @@ -1053,8 +1054,10 @@ c_common_handle_option (size_t scode, const char *arg, int value) /* Post-switch processing. */ bool -c_common_post_options (const char **pfilename ATTRIBUTE_UNUSED) +c_common_post_options (const char **pfilename) { + struct cpp_callbacks *cb; + /* Canonicalize the input and output filenames. */ if (in_fnames == NULL) { @@ -1142,7 +1145,9 @@ c_common_post_options (const char **pfilename ATTRIBUTE_UNUSED) input_line = 0; } - cpp_get_callbacks (parse_in)->file_change = cb_file_change; + cb = cpp_get_callbacks (parse_in); + cb->file_change = cb_file_change; + cb->dir_change = cb_dir_change; cpp_post_options (parse_in); saved_lineno = input_line; @@ -1152,6 +1157,14 @@ c_common_post_options (const char **pfilename ATTRIBUTE_UNUSED) immediately. */ errorcount += cpp_errors (parse_in); + *pfilename = this_input_filename + = cpp_read_main_file (parse_in, in_fnames[0]); + if (this_input_filename == NULL) + return true; + + if (flag_preprocess_only && flag_working_directory) + pp_dir_change (parse_in, get_src_pwd ()); + return flag_preprocess_only; } @@ -1176,8 +1189,8 @@ c_common_init (void) if (flag_preprocess_only) { - if (finish_options (in_fnames[0])) - preprocess_file (parse_in); + finish_options (); + preprocess_file (parse_in); return false; } @@ -1211,10 +1224,12 @@ c_common_parse_file (int set_yydebug ATTRIBUTE_UNUSED) /* Reset cpplib's macros and start a new file. */ cpp_undef_all (parse_in); + main_input_filename = this_input_filename + = cpp_read_main_file (parse_in, in_fnames[file_index]); + if (this_input_filename == NULL) + break; } - - if (! finish_options(in_fnames[file_index])) - break; + finish_options (); if (file_index == 0) pch_init(); c_parse_file (); @@ -1355,8 +1370,6 @@ sanitize_cpp_opts (void) actually output the current directory? */ if (flag_working_directory == -1) flag_working_directory = (debug_info_level != DINFO_LEVEL_NONE); - cpp_opts->working_directory - = flag_preprocess_only && flag_working_directory; } /* Add include path with a prefix at the front of its name. */ @@ -1379,21 +1392,15 @@ add_prefixed_path (const char *suffix, size_t chain) add_path (path, chain, 0); } -/* Handle -D, -U, -A, -imacros, and the first -include. - TIF is the input file to which we will return after processing all - the includes. Returns true on success. */ -static bool -finish_options (const char *tif) +/* Handle -D, -U, -A, -imacros, and the first -include. */ +static void +finish_options (void) { - this_input_filename = tif; - if (! cpp_find_main_file (parse_in, this_input_filename)) - return false; - if (!cpp_opts->preprocessed) { size_t i; - cpp_change_file (parse_in, LC_ENTER, _("<built-in>")); + cpp_change_file (parse_in, LC_RENAME, _("<built-in>")); cpp_init_builtins (parse_in, flag_hosted); c_cpp_builtins (parse_in); @@ -1443,7 +1450,6 @@ finish_options (const char *tif) include_cursor = 0; push_command_line_include (); - return true; } /* Give CPP the next file given by -include, if any. */ @@ -1462,12 +1468,15 @@ push_command_line_include (void) if (include_cursor == deferred_count) { include_cursor++; - /* Restore the line map from <command line>. */ - if (! cpp_opts->preprocessed) - cpp_change_file (parse_in, LC_LEAVE, NULL); /* -Wunused-macros should only warn about macros defined hereafter. */ cpp_opts->warn_unused_macros = warn_unused_macros; - cpp_push_main_file (parse_in); + /* Restore the line map from <command line>. */ + if (! cpp_opts->preprocessed) + cpp_change_file (parse_in, LC_RENAME, main_input_filename); + + /* Set this here so the client can change the option if it wishes, + and after stacking the main file so we don't trace the main file. */ + line_table.trace_includes = cpp_opts->print_include_names; } } @@ -1485,6 +1494,13 @@ cb_file_change (cpp_reader *pfile ATTRIBUTE_UNUSED, push_command_line_include (); } +void +cb_dir_change (cpp_reader *pfile ATTRIBUTE_UNUSED, const char *dir) +{ + if (! set_src_pwd (dir)) + warning ("too late for # directive to set debug directory"); +} + /* Set the C 89 standard (with 1994 amendments if C94, without GNU extensions if ISO). There is no concept of gnu94. */ static void |