X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fc-opts.c;h=ebf23e571d79fb5a94d7930ffb1e6040f5f25e65;hb=9508132a0f3d625ed0b5e8fc2f4f65faa18d2160;hp=0377a5d3fee41d1f0ac6294fb66e8166a3b30d6e;hpb=841667053837143adaa91e24e7214b191ee179a1;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 0377a5d3fee..ebf23e571d7 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -1,5 +1,5 @@ /* C/ObjC/C++ command line option handling. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. Contributed by Neil Booth. This file is part of GCC. @@ -100,9 +100,6 @@ static size_t deferred_count; /* Number of deferred options scanned for -include. */ static size_t include_cursor; -/* Permit Fortran front-end options. */ -static bool permit_fortran_options; - static void set_Wimplicit (int); static void handle_OPT_d (const char *); static void set_std_cxx98 (int); @@ -194,10 +191,10 @@ defer_opt (enum opt_code code, const char *arg) /* Common initialization before parsing options. */ unsigned int -c_common_init_options (unsigned int argc, const char ** ARG_UNUSED (argv)) +c_common_init_options (unsigned int argc, const char **argv) { static const unsigned int lang_flags[] = {CL_C, CL_ObjC, CL_CXX, CL_ObjCXX}; - unsigned int result; + unsigned int i, result; /* This is conditionalized only because that is the way the front ends used to do it. Maybe this should be unconditional? */ @@ -230,16 +227,17 @@ c_common_init_options (unsigned int argc, const char ** ARG_UNUSED (argv)) result = lang_flags[c_language]; - /* If potentially preprocessing Fortran we have to accept its front - end options since the driver passes most of them through. */ -#ifdef CL_F77 - if (c_language == clk_c && argc > 2 - && !strcmp (argv[2], "-traditional-cpp" )) + if (c_language == clk_c) { - permit_fortran_options = true; - result |= CL_F77; + /* If preprocessing assembly language, accept any of the C-family + front end options since the driver may pass them through. */ + for (i = 1; i < argc; i++) + if (! strcmp (argv[i], "-lang-asm")) + { + result |= CL_C | CL_ObjC | CL_CXX | CL_ObjCXX; + break; + } } -#endif return result; } @@ -260,7 +258,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) default: if (cl_options[code].flags & (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX)) break; - result = permit_fortran_options; + result = 0; break; case OPT__output_pch_: @@ -462,10 +460,27 @@ c_common_handle_option (size_t scode, const char *arg, int value) cpp_opts->warn_multichar = value; break; + case OPT_Wnormalized_: + if (!value || (arg && strcasecmp (arg, "none") == 0)) + cpp_opts->warn_normalize = normalized_none; + else if (!arg || strcasecmp (arg, "nfkc") == 0) + cpp_opts->warn_normalize = normalized_KC; + else if (strcasecmp (arg, "id") == 0) + cpp_opts->warn_normalize = normalized_identifier_C; + else if (strcasecmp (arg, "nfc") == 0) + cpp_opts->warn_normalize = normalized_C; + else + error ("argument %qs to %<-Wnormalized%> not recognized", arg); + break; + case OPT_Wreturn_type: warn_return_type = value; break; + case OPT_Wstrict_null_sentinel: + warn_strict_null_sentinel = value; + break; + case OPT_Wsystem_headers: cpp_opts->warn_system_headers = value; break; @@ -539,7 +554,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) case OPT_fvtable_thunks: case OPT_fxref: case OPT_fvtable_gc: - warning ("switch %qs is no longer supported", option->opt_text); + warning (0, "switch %qs is no longer supported", option->opt_text); break; case OPT_faccess_control: @@ -590,7 +605,6 @@ c_common_handle_option (size_t scode, const char *arg, int value) case OPT_fsigned_bitfields: flag_signed_bitfields = value; - explicit_flag_signed_bitfields = 1; break; case OPT_fsigned_char: @@ -599,7 +613,6 @@ c_common_handle_option (size_t scode, const char *arg, int value) case OPT_funsigned_bitfields: flag_signed_bitfields = !value; - explicit_flag_signed_bitfields = 1; break; case OPT_funsigned_char: @@ -654,7 +667,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) break; case OPT_fhandle_exceptions: - warning ("-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"); + warning (0, "-fhandle-exceptions has been renamed -fexceptions (and is now on by default)"); flag_exceptions = value; break; @@ -947,10 +960,7 @@ c_common_post_options (const char **pfilename) if (!flag_no_inline) flag_no_inline = 1; if (flag_inline_functions) - { - flag_inline_trees = 2; - flag_inline_functions = 0; - } + flag_inline_trees = 2; /* If we are given more than one input file, we must use unit-at-a-time mode. */ @@ -973,17 +983,22 @@ c_common_post_options (const char **pfilename) /* Special format checking options don't work without -Wformat; warn if they are used. */ if (warn_format_y2k && !warn_format) - warning ("-Wformat-y2k ignored without -Wformat"); + warning (0, "-Wformat-y2k ignored without -Wformat"); if (warn_format_extra_args && !warn_format) - warning ("-Wformat-extra-args ignored without -Wformat"); + warning (0, "-Wformat-extra-args ignored without -Wformat"); if (warn_format_zero_length && !warn_format) - warning ("-Wformat-zero-length ignored without -Wformat"); + warning (0, "-Wformat-zero-length ignored without -Wformat"); if (warn_format_nonliteral && !warn_format) - warning ("-Wformat-nonliteral ignored without -Wformat"); + warning (0, "-Wformat-nonliteral ignored without -Wformat"); if (warn_format_security && !warn_format) - warning ("-Wformat-security ignored without -Wformat"); + warning (0, "-Wformat-security ignored without -Wformat"); if (warn_missing_format_attribute && !warn_format) - warning ("-Wmissing-format-attribute ignored without -Wformat"); + warning (0, "-Wmissing-format-attribute ignored without -Wformat"); + + /* C99 requires special handling of complex multiplication and division; + -ffast-math and -fcx-limited-range are handled in process_options. */ + if (flag_isoc99) + flag_complex_method = 2; if (flag_preprocess_only) { @@ -1085,19 +1100,24 @@ c_common_parse_file (int set_yydebug) yydebug = set_yydebug; #else if (set_yydebug) - warning ("YYDEBUG was not defined at build time, -dy ignored"); + warning (0, "YYDEBUG was not defined at build time, -dy ignored"); #endif i = 0; for (;;) { + /* Start the main input file, if the debug writer wants it. */ + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->start_source_file) (0, this_input_filename); finish_options (); pch_init (); push_file_scope (); c_parse_file (); finish_file (); pop_file_scope (); - + /* And end the main input file, if the debug writer wants it */ + if (debug_hooks->start_end_main_source_file) + (*debug_hooks->end_source_file) (0); if (++i >= num_in_fnames) break; cpp_undef_all (parse_in); @@ -1183,6 +1203,7 @@ check_deps_environment_vars (void) deps_file = spec; deps_append = 1; + deps_seen = true; } } @@ -1227,11 +1248,13 @@ sanitize_cpp_opts (void) /* Disable -dD, -dN and -dI if normal output is suppressed. Allow -dM since at least glibc relies on -M -dM to work. */ + /* Also, flag_no_output implies flag_no_line_commands, always. */ if (flag_no_output) { if (flag_dump_macros != 'M') flag_dump_macros = 0; flag_dump_includes = 0; + flag_no_line_commands = 1; } cpp_opts->unsigned_char = !flag_signed_char; @@ -1283,7 +1306,10 @@ finish_options (void) { size_t i; - cpp_change_file (parse_in, LC_RENAME, _("")); + cb_file_change (parse_in, + linemap_add (&line_table, LC_RENAME, 0, + _(""), 0)); + cpp_init_builtins (parse_in, flag_hosted); c_cpp_builtins (parse_in); @@ -1355,7 +1381,7 @@ push_command_line_include (void) cpp_opts->warn_unused_macros = warn_unused_macros; /* Restore the line map from . */ if (!cpp_opts->preprocessed) - cpp_change_file (parse_in, LC_RENAME, main_input_filename); + cpp_change_file (parse_in, LC_RENAME, this_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. */ @@ -1381,7 +1407,7 @@ void cb_dir_change (cpp_reader * ARG_UNUSED (pfile), const char *dir) { if (!set_src_pwd (dir)) - warning ("too late for # directive to set debug directory"); + warning (0, "too late for # directive to set debug directory"); } /* Set the C 89 standard (with 1994 amendments if C94, without GNU