#include "debug.h" /* For debug_hooks. */
#include "opts.h"
#include "options.h"
-#include "langhooks-def.h"
#ifndef DOLLARS_IN_IDENTIFIERS
# define DOLLARS_IN_IDENTIFIERS true
static cpp_options *cpp_opts;
/* Input filename. */
-static const char **in_fnames;
-static unsigned num_in_fnames;
static const char *this_input_filename;
/* Filename and stream for preprocessed output. */
return result;
}
-/* Handle switch SCODE with argument ARG. ON is true, unless no-
+/* Handle switch SCODE with argument ARG. VALUE is true, unless no-
form of an -f or -W option was given. Returns 0 if the switch was
invalid, a negative number to prevent language-independent
processing in toplev.c (a hack necessary for the short-term). */
flag_no_line_commands = 1;
break;
+ case OPT_fworking_directory:
+ flag_working_directory = value;
+ break;
+
case OPT_U:
defer_opt (code, arg);
break;
warn_ctor_dtor_privacy = value;
break;
+ case OPT_Wdeclaration_after_statement:
+ warn_declaration_after_statement = value;
+ break;
+
case OPT_Wdeprecated:
warn_deprecated = value;
cpp_opts->warn_deprecated = value;
warn_format_zero_length = value;
break;
+ case OPT_Winit_self:
+ warn_init_self = value;
+ break;
+
case OPT_Wimplicit:
set_Wimplicit (value);
break;
break;
case OPT_Wimport:
- cpp_opts->warn_import = value;
+ /* Silently ignore for now. */
break;
case OPT_Winvalid_offsetof:
warn_nonnull = value;
break;
+ case OPT_Wold_style_definition:
+ warn_old_style_definition = value;
+ break;
+
case OPT_Wold_style_cast:
warn_old_style_cast = value;
break;
case OPT_fthis_is_variable:
case OPT_fvtable_thunks:
case OPT_fxref:
+ case OPT_fvtable_gc:
warning ("switch \"%s\" is no longer supported", option->opt_text);
break;
case OPT_ffreestanding:
value = !value;
- /* Fall through... */
+ /* Fall through.... */
case OPT_fhosted:
flag_hosted = value;
flag_no_builtin = !value;
flag_next_runtime = value;
break;
+ case OPT_fnil_receivers:
+ flag_nil_receivers = value;
+ break;
+
case OPT_fnonansi_builtins:
flag_no_nonansi_builtin = !value;
break;
+ case OPT_fobjc_exceptions:
+ flag_objc_exceptions = value;
+ break;
+
case OPT_foperator_names:
cpp_opts->operator_names = value;
break;
cpp_opts->preprocessed = value;
break;
+ case OPT_freplace_objc_classes:
+ flag_replace_objc_classes = value;
+ break;
+
case OPT_frepo:
flag_use_repository = value;
if (value)
max_tinst_depth = value;
break;
- case OPT_fvtable_gc:
- flag_vtable_gc = value;
- break;
-
case OPT_fuse_cxa_atexit:
flag_use_cxa_atexit = value;
break;
flag_weak = value;
break;
+ case OPT_fzero_link:
+ flag_zero_link = value;
+ break;
+
case OPT_gen_decls:
flag_gen_declaration = 1;
break;
is not overridden. */
case OPT_pedantic_errors:
cpp_opts->pedantic_errors = 1;
- /* fall through */
+ /* Fall through. */
case OPT_pedantic:
cpp_opts->pedantic = 1;
cpp_opts->warn_endif_labels = 1;
return result;
}
-/* Handle FILENAME from the command line. */
-void
-c_common_handle_filename (const char *filename)
-{
- num_in_fnames++;
- in_fnames = xrealloc (in_fnames, num_in_fnames * sizeof (in_fnames[0]));
- in_fnames[num_in_fnames - 1] = filename;
-}
-
/* Post-switch processing. */
bool
-c_common_post_options (const char **pfilename)
+c_common_post_options (const char **pfilename ATTRIBUTE_UNUSED)
{
/* Canonicalize the input and output filenames. */
if (in_fnames == NULL)
}
cpp_get_callbacks (parse_in)->file_change = cb_file_change;
-
- /* NOTE: we use in_fname here, not the one supplied. */
- *pfilename = cpp_read_main_file (parse_in, in_fnames[0]);
+ cpp_post_options (parse_in);
saved_lineno = input_line;
input_line = 0;
/* Reset cpplib's macros and start a new file. */
cpp_undef_all (parse_in);
- cpp_read_next_file (parse_in, in_fnames[file_index]);
}
finish_options(in_fnames[file_index]);
fatal_error ("when writing output to %s: %m", out_fname);
}
-/* A wrapper around lhd_set_decl_assembler_name that gives static
- variables their C names if they are at the top level and only one
- translation unit is being compiled, for backwards compatibility
- with certain bizzare assembler hacks (like crtstuff.c). */
-
-void
-c_static_assembler_name (tree decl)
-{
- if (num_in_fnames == 1
- && TREE_STATIC (decl) && !TREE_PUBLIC (decl) && DECL_CONTEXT (decl)
- && TREE_CODE (DECL_CONTEXT (decl)) == TRANSLATION_UNIT_DECL)
- SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
- else
- lhd_set_decl_assembler_name (decl);
-}
-
/* Either of two environment variables can specify output of
dependencies. Their value is either "OUTPUT_FILE" or "OUTPUT_FILE
DEPS_TARGET", where OUTPUT_FILE is the file to write deps info to
and/or -Wtraditional, whatever the ordering. */
cpp_opts->warn_long_long
= warn_long_long && ((!flag_isoc99 && pedantic) || warn_traditional);
+
+ /* If we're generating preprocessor output, emit current directory
+ if explicitly requested or if debugging information is enabled.
+ ??? Maybe we should only do it for debugging formats that
+ 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. */
{
size_t i;
- cpp_change_file (parse_in, LC_RENAME, _("<built-in>"));
+ cpp_change_file (parse_in, LC_ENTER, _("<built-in>"));
cpp_init_builtins (parse_in, flag_hosted);
c_cpp_builtins (parse_in);
include_cursor = 0;
this_input_filename = tif;
+ cpp_find_main_file (parse_in, this_input_filename);
push_command_line_include ();
}
static void
push_command_line_include (void)
{
- if (cpp_opts->preprocessed)
- return;
-
while (include_cursor < deferred_count)
{
struct deferred_opt *opt = &deferred_opts[include_cursor++];
- if (opt->code == OPT_include && cpp_push_include (parse_in, opt->arg))
+ if (! cpp_opts->preprocessed && opt->code == OPT_include
+ && cpp_push_include (parse_in, opt->arg))
return;
}
if (include_cursor == deferred_count)
{
+ include_cursor++;
/* Restore the line map from <command line>. */
- cpp_change_file (parse_in, LC_RENAME, this_input_filename);
+ 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;
- include_cursor++;
+ cpp_push_main_file (parse_in);
}
}
else
fe_file_change (new_map);
- if (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map))
+ if (new_map == 0 || (new_map->reason == LC_LEAVE && MAIN_FILE_P (new_map)))
push_command_line_include ();
}
flag_no_asm = iso;
flag_no_gnu_keywords = iso;
flag_no_nonansi_builtin = iso;
- flag_noniso_default_format_attributes = !iso;
flag_isoc94 = c94;
flag_isoc99 = 0;
flag_writable_strings = 0;
cpp_set_lang (parse_in, iso ? CLK_STDC99: CLK_GNUC99);
flag_no_asm = iso;
flag_no_nonansi_builtin = iso;
- flag_noniso_default_format_attributes = !iso;
flag_iso = iso;
flag_isoc99 = 1;
flag_isoc94 = 1;
cpp_set_lang (parse_in, iso ? CLK_CXX98: CLK_GNUCXX);
flag_no_gnu_keywords = iso;
flag_no_nonansi_builtin = iso;
- flag_noniso_default_format_attributes = !iso;
flag_iso = iso;
}