diff options
author | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-06 10:12:36 +0000 |
---|---|---|
committer | manu <manu@138bc75d-0d04-0410-961f-82ee72b054a4> | 2010-05-06 10:12:36 +0000 |
commit | 1f3db819ff589fec50544ce334ae0200afade36f (patch) | |
tree | dbd0e72df35da905dec3347904aaa7d7fac6dd9d /gcc/c-opts.c | |
parent | 4bb63bc871bf9102c57db32f7b15e9c0ace88c10 (diff) | |
download | gcc-1f3db819ff589fec50544ce334ae0200afade36f.tar.gz |
2010-05-06 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR 40989
* doc/invoke.texi (Wimplicit): Document as C only.
* opts.c (common_handle_option): Add argument kind.
(handle_option): Rename as read_cmdline_option. Factor out code to...
(handle_option): ... here. New.
(handle_options): Rename as read_cmdline_options.
(decode_options): Update call.
(set_option): Use option index instead of option pointer. Classify
diagnostics correctly.
(enable_warning_as_error): Call handle_option.
* opts.h (set_option): Update declaration.
(handle_option): Declare.
* langhooks.h (struct lang_hooks): Add argument kind to
handle_option.
* c.opt (Wimplicit,Wimplicit-int): Initialize to -1.
* c-opts.c (set_Wimplicit): Delete.
(c_family_lang_mask): New static constant.
(c_common_handle_option): Add argument kind. Use handle_option
instead of set_Wimplicit.
(c_common_post_options): warn_implicit and warn_implicit_int
are disabled by default.
* c-common.c (warn_implicit): Do not define here.
* c-common.h (warn_implicit): Do not declare here.
(c_common_handle_option): Update declaration.
* lto-opts.c (lto_reissue_options): Update call to set_option.
java/
* lang.c (java_handle_option): Add argument kind.
fortran/
* options.c (gfc_handle_option): Add argument kind.
* gfortran.h (gfc_handle_option): Update declaration.
ada/
* gcc-interface/misc.c (gnat_handle_option): Add argument kind.
testsuite/
* gcc.dg/pr40989.c: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159102 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-opts.c')
-rw-r--r-- | gcc/c-opts.c | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/gcc/c-opts.c b/gcc/c-opts.c index 66101b7eded..b7211575650 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -106,7 +106,6 @@ static size_t deferred_count; /* Number of deferred options scanned for -include. */ static size_t include_cursor; -static void set_Wimplicit (int); static void handle_OPT_d (const char *); static void set_std_cxx98 (int); static void set_std_cxx0x (int); @@ -135,6 +134,10 @@ static struct deferred_opt const char *arg; } *deferred_opts; + +static const unsigned int +c_family_lang_mask = (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX); + /* Complain that switch CODE expects an argument but none was provided. OPT was the command-line option. Return FALSE to get the default message in opts.c, TRUE if we provide a specialized @@ -349,7 +352,8 @@ c_common_init_options (unsigned int argc, const char **argv) invalid, a negative number to prevent language-independent processing in toplev.c (a hack necessary for the short-term). */ int -c_common_handle_option (size_t scode, const char *arg, int value) +c_common_handle_option (size_t scode, const char *arg, int value, + int kind) { const struct cl_option *option = &cl_options[scode]; enum opt_code code = (enum opt_code) scode; @@ -362,7 +366,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) switch (code) { default: - if (cl_options[code].flags & (CL_C | CL_CXX | CL_ObjC | CL_ObjCXX)) + if (cl_options[code].flags & c_family_lang_mask) { if ((option->flags & CL_TARGET) && ! targetcm.handle_c_option (scode, arg, value)) @@ -471,7 +475,7 @@ c_common_handle_option (size_t scode, const char *arg, int value) case OPT_Wall: warn_unused = value; set_Wformat (value); - set_Wimplicit (value); + handle_option (OPT_Wimplicit, value, NULL, c_family_lang_mask, kind); warn_char_subscripts = value; warn_missing_braces = value; warn_parentheses = value; @@ -569,7 +573,13 @@ c_common_handle_option (size_t scode, const char *arg, int value) break; case OPT_Wimplicit: - set_Wimplicit (value); + gcc_assert (value == 0 || value == 1); + if (warn_implicit_int == -1) + handle_option (OPT_Wimplicit_int, value, NULL, + c_family_lang_mask, kind); + if (warn_implicit_function_declaration == -1) + handle_option (OPT_Wimplicit_function_declaration, value, NULL, + c_family_lang_mask, kind); break; case OPT_Wimport: @@ -1246,6 +1256,12 @@ c_common_post_options (const char **pfilename) "-Wformat-security ignored without -Wformat"); } + if (warn_implicit == -1) + warn_implicit = 0; + + if (warn_implicit_int == -1) + warn_implicit_int = 0; + /* -Wimplicit-function-declaration is enabled by default for C99. */ if (warn_implicit_function_declaration == -1) warn_implicit_function_declaration = flag_isoc99; @@ -1766,15 +1782,6 @@ set_std_cxx0x (int iso) cxx_dialect = cxx0x; } -/* Handle setting implicit to ON. */ -static void -set_Wimplicit (int on) -{ - warn_implicit = on; - warn_implicit_int = on; - warn_implicit_function_declaration = on; -} - /* Args to -d specify what to dump. Silently ignore unrecognized options; they may be aimed at toplev.c. */ static void |