summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-06 10:12:36 +0000
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-06 10:12:36 +0000
commit1f3db819ff589fec50544ce334ae0200afade36f (patch)
treedbd0e72df35da905dec3347904aaa7d7fac6dd9d
parent4bb63bc871bf9102c57db32f7b15e9c0ace88c10 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog28
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/misc.c4
-rw-r--r--gcc/c-common.c4
-rw-r--r--gcc/c-common.h6
-rw-r--r--gcc/c-opts.c35
-rw-r--r--gcc/c.opt5
-rw-r--r--gcc/doc/invoke.texi6
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/gfortran.h2
-rw-r--r--gcc/fortran/options.c3
-rw-r--r--gcc/java/ChangeLog5
-rw-r--r--gcc/java/lang.c5
-rw-r--r--gcc/langhooks.h2
-rw-r--r--gcc/lto-opts.c2
-rw-r--r--gcc/opts.c94
-rw-r--r--gcc/opts.h5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr40989.c6
19 files changed, 154 insertions, 76 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index aacaefe2fe7..fff96268288 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,31 @@
+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.
+
2010-05-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43571
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index bfe96da0afb..cb1013238b6 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-06 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 40989
+ * gcc-interface/misc.c (gnat_handle_option): Add argument kind.
+
2010-05-02 Giuseppe Scrivano <gscrivano@gnu.org>
* gnathtml.pl: Use 755 as mask for new directories.
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index 41c61853c70..db5badcf145 100644
--- a/gcc/ada/gcc-interface/misc.c
+++ b/gcc/ada/gcc-interface/misc.c
@@ -66,7 +66,7 @@
static bool gnat_init (void);
static unsigned int gnat_init_options (unsigned int, const char **);
-static int gnat_handle_option (size_t, const char *, int);
+static int gnat_handle_option (size_t, const char *, int, int);
static bool gnat_post_options (const char **);
static alias_set_type gnat_get_alias_set (tree);
static void gnat_print_decl (FILE *, tree, int);
@@ -184,7 +184,7 @@ gnat_parse_file (int set_yydebug ATTRIBUTE_UNUSED)
that have been successfully decoded or 0 on failure. */
static int
-gnat_handle_option (size_t scode, const char *arg, int value)
+gnat_handle_option (size_t scode, const char *arg, int value, int kind ATTRIBUTE_UNUSED)
{
const struct cl_option *option = &cl_options[scode];
enum opt_code code = (enum opt_code) scode;
diff --git a/gcc/c-common.c b/gcc/c-common.c
index b3254b2386e..d939e12c65c 100644
--- a/gcc/c-common.c
+++ b/gcc/c-common.c
@@ -427,10 +427,6 @@ int flag_threadsafe_statics = 1;
int flag_pretty_templates = 1;
-/* Nonzero means warn about implicit declarations. */
-
-int warn_implicit = 1;
-
/* Maximum template instantiation depth. This limit exists to limit the
time it takes to notice infinite template instantiations; the default
value of 1024 is likely to be in the next C++ standard. */
diff --git a/gcc/c-common.h b/gcc/c-common.h
index 7f47c2e457b..0da83d5e395 100644
--- a/gcc/c-common.h
+++ b/gcc/c-common.h
@@ -750,10 +750,6 @@ extern int flag_threadsafe_statics;
extern int flag_pretty_templates;
-/* Nonzero means warn about implicit declarations. */
-
-extern int warn_implicit;
-
/* Warn about using __null (as NULL in C++) as sentinel. For code compiled
with GCC this doesn't matter as __null is guaranteed to have the right
size. */
@@ -827,7 +823,7 @@ extern void set_Wformat (int);
extern tree handle_format_attribute (tree *, tree, tree, int, bool *);
extern tree handle_format_arg_attribute (tree *, tree, tree, int, bool *);
extern bool attribute_takes_identifier_p (const_tree);
-extern int c_common_handle_option (size_t code, const char *arg, int value);
+extern int c_common_handle_option (size_t code, const char *arg, int value, int kind);
extern bool c_common_missing_argument (const char *opt, size_t code);
extern tree c_common_type_for_mode (enum machine_mode, int);
extern tree c_common_type_for_size (unsigned int, int);
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
diff --git a/gcc/c.opt b/gcc/c.opt
index 3ab29830886..c79165a53f6 100644
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -263,14 +263,15 @@ C ObjC C++ ObjC++ Var(warn_init_self) Warning
Warn about variables which are initialized to themselves
Wimplicit
-C ObjC C++ ObjC++ Warning
+C ObjC Var(warn_implicit) Init(-1) Warning
+Warn about implicit declarations
Wimplicit-function-declaration
C ObjC Var(warn_implicit_function_declaration) Init(-1) Warning
Warn about implicit function declarations
Wimplicit-int
-C ObjC Var(warn_implicit_int) Warning
+C ObjC Var(warn_implicit_int) Init(-1) Warning
Warn when a declaration does not specify a type
Wimport
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 6a60fbb39bf..33e4612a10a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -2901,8 +2901,8 @@ Options} and @ref{Objective-C and Objective-C++ Dialect Options}.
-Wc++0x-compat @gol
-Wchar-subscripts @gol
-Wenum-compare @r{(in C/Objc; this is on by default in C++)} @gol
--Wimplicit-int @gol
--Wimplicit-function-declaration @gol
+-Wimplicit-int @r{(C and Objective-C only)} @gol
+-Wimplicit-function-declaration @r{(C and Objective-C only)} @gol
-Wcomment @gol
-Wformat @gol
-Wmain @r{(only for C/ObjC and unless} @option{-ffreestanding}@r{)} @gol
@@ -3145,7 +3145,7 @@ enabled by default and it is made into an error by
@option{-pedantic-errors}. This warning is also enabled by
@option{-Wall}.
-@item -Wimplicit
+@item -Wimplicit @r{(C and Objective-C only)}
@opindex Wimplicit
@opindex Wno-implicit
Same as @option{-Wimplicit-int} and @option{-Wimplicit-function-declaration}.
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 8580997fb4c..acc40baeba6 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,4 +1,10 @@
-2010-05-0 Tobias Burnus <burnus@net-b.de>
+2010-05-06 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 40989
+ * options.c (gfc_handle_option): Add argument kind.
+ * gfortran.h (gfc_handle_option): Update declaration.
+
+2010-05-06 Tobias Burnus <burnus@net-b.de>
PR fortran/43985
* trans-types.c (gfc_sym_type): Mark Cray pointees as
diff --git a/gcc/fortran/gfortran.h b/gcc/fortran/gfortran.h
index 827a13f4dc2..580ba3589ab 100644
--- a/gcc/fortran/gfortran.h
+++ b/gcc/fortran/gfortran.h
@@ -2310,7 +2310,7 @@ int get_c_kind (const char *, CInteropKind_t *);
/* options.c */
unsigned int gfc_init_options (unsigned int, const char **);
-int gfc_handle_option (size_t, const char *, int);
+int gfc_handle_option (size_t, const char *, int, int);
bool gfc_post_options (const char **);
/* f95-lang.c */
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index bcbf69549b3..28c91147534 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -532,7 +532,8 @@ gfc_handle_runtime_check_option (const char *arg)
recognized and handled. */
int
-gfc_handle_option (size_t scode, const char *arg, int value)
+gfc_handle_option (size_t scode, const char *arg, int value,
+ int kind ATTRIBUTE_UNUSED)
{
int result = 1;
enum opt_code code = (enum opt_code) scode;
diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog
index b88bd1974ed..a0b868d8ec9 100644
--- a/gcc/java/ChangeLog
+++ b/gcc/java/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-06 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 40989
+ * lang.c (java_handle_option): Add argument kind.
+
2010-04-18 Eric Botcazou <ebotcazou@adacore.com>
* decl.c (java_init_decl_processing): Remove argument in call to
diff --git a/gcc/java/lang.c b/gcc/java/lang.c
index 22fe4ffd09b..a704d5d9020 100644
--- a/gcc/java/lang.c
+++ b/gcc/java/lang.c
@@ -52,7 +52,7 @@ static void java_finish (void);
static unsigned int java_init_options (unsigned int, const char **);
static bool java_post_options (const char **);
-static int java_handle_option (size_t scode, const char *arg, int value);
+static int java_handle_option (size_t scode, const char *arg, int value, int kind);
static void put_decl_string (const char *, int);
static void put_decl_node (tree, int);
static void java_print_error_function (diagnostic_context *, const char *,
@@ -175,7 +175,8 @@ struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
* return 0, but do not complain if the option is not recognized.
*/
static int
-java_handle_option (size_t scode, const char *arg, int value)
+java_handle_option (size_t scode, const char *arg, int value,
+ int kind ATTRIBUTE_UNUSED)
{
enum opt_code code = (enum opt_code) scode;
diff --git a/gcc/langhooks.h b/gcc/langhooks.h
index faac14af859..ce3bd03b949 100644
--- a/gcc/langhooks.h
+++ b/gcc/langhooks.h
@@ -283,7 +283,7 @@ struct lang_hooks
Return 1 if the switch is valid, 0 if invalid, and -1 if it's
valid and should not be treated as language-independent too. */
- int (*handle_option) (size_t code, const char *arg, int value);
+ int (*handle_option) (size_t code, const char *arg, int value, int kind);
/* Return false to use the default complaint about a missing
argument, otherwise output a complaint and return true. */
diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c
index f96dfab522d..b7bf6ca2c96 100644
--- a/gcc/lto-opts.c
+++ b/gcc/lto-opts.c
@@ -383,7 +383,7 @@ lto_reissue_options (void)
const struct cl_option *option = &cl_options[o->code];
if (option->flag_var)
- set_option (option, o->value, o->arg);
+ set_option (o->code, o->value, o->arg, 0 /*DK_UNSPECIFIED*/);
if (o->type == CL_TARGET)
targetm.handle_option (o->code, o->arg, o->value);
diff --git a/gcc/opts.c b/gcc/opts.c
index fd8a5044323..cf1fd2ded43 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -372,13 +372,11 @@ const char **in_fnames;
unsigned num_in_fnames;
static int common_handle_option (size_t scode, const char *arg, int value,
- unsigned int lang_mask);
+ unsigned int lang_mask, int kind);
static void handle_param (const char *);
-static unsigned int handle_option (const char **argv, unsigned int lang_mask);
static char *write_langs (unsigned int lang_mask);
static void complain_wrong_lang (const char *, const struct cl_option *,
unsigned int lang_mask);
-static void handle_options (unsigned int, const char **, unsigned int);
static void set_debug_level (enum debug_info_type type, int extended,
const char *arg);
@@ -485,10 +483,51 @@ void print_ignored_options (void)
input_location = saved_loc;
}
+
+/* Handle option OPT_INDEX, and argument ARG, for the language
+ indicated by LANG_MASK. VALUE is true, unless no- form of an -f or
+ -W option was given. KIND is the diagnostic_t if this is a
+ diagnostics option, DK_UNSPECIFIED otherwise. Returns false if the
+ switch was invalid. */
+bool
+handle_option (int opt_index, int value, const char *arg,
+ unsigned int lang_mask, int kind)
+{
+ const struct cl_option *option = &cl_options[opt_index];
+
+ if (option->flag_var)
+ set_option (opt_index, value, arg, kind);
+
+ if (option->flags & lang_mask)
+ {
+ if (lang_hooks.handle_option (opt_index, arg, value, kind) == 0)
+ return false;
+ else
+ lto_register_user_option (opt_index, arg, value, lang_mask);
+ }
+
+ if (option->flags & CL_COMMON)
+ {
+ if (common_handle_option (opt_index, arg, value, lang_mask, kind) == 0)
+ return false;
+ else
+ lto_register_user_option (opt_index, arg, value, CL_COMMON);
+ }
+
+ if (option->flags & CL_TARGET)
+ {
+ if (!targetm.handle_option (opt_index, arg, value))
+ return false;
+ else
+ lto_register_user_option (opt_index, arg, value, CL_TARGET);
+ }
+ return true;
+}
+
/* Handle the switch beginning at ARGV for the language indicated by
LANG_MASK. Returns the number of switches consumed. */
static unsigned int
-handle_option (const char **argv, unsigned int lang_mask)
+read_cmdline_option (const char **argv, unsigned int lang_mask)
{
size_t opt_index;
const char *opt, *arg = 0;
@@ -609,32 +648,8 @@ handle_option (const char **argv, unsigned int lang_mask)
}
}
- if (option->flag_var)
- set_option (option, value, arg);
-
- if (option->flags & lang_mask)
- {
- if (lang_hooks.handle_option (opt_index, arg, value) == 0)
- result = 0;
- else
- lto_register_user_option (opt_index, arg, value, lang_mask);
- }
-
- if (result && (option->flags & CL_COMMON))
- {
- if (common_handle_option (opt_index, arg, value, lang_mask) == 0)
- result = 0;
- else
- lto_register_user_option (opt_index, arg, value, CL_COMMON);
- }
-
- if (result && (option->flags & CL_TARGET))
- {
- if (!targetm.handle_option (opt_index, arg, value))
- result = 0;
- else
- lto_register_user_option (opt_index, arg, value, CL_TARGET);
- }
+ if (!handle_option (opt_index, value, arg, lang_mask, DK_UNSPECIFIED))
+ result = 0;
done:
if (dup)
@@ -735,7 +750,7 @@ flag_instrument_functions_exclude_p (tree fndecl)
contains has a single bit set representing the current
language. */
static void
-handle_options (unsigned int argc, const char **argv, unsigned int lang_mask)
+read_cmdline_options (unsigned int argc, const char **argv, unsigned int lang_mask)
{
unsigned int n, i;
@@ -757,7 +772,7 @@ handle_options (unsigned int argc, const char **argv, unsigned int lang_mask)
continue;
}
- n = handle_option (argv + i, lang_mask);
+ n = read_cmdline_option (argv + i, lang_mask);
if (!n)
{
@@ -973,7 +988,7 @@ decode_options (unsigned int argc, const char **argv)
OPTIMIZATION_OPTIONS (optimize, optimize_size);
#endif
- handle_options (argc, argv, lang_mask);
+ read_cmdline_options (argc, argv, lang_mask);
if (dump_base_name && ! IS_ABSOLUTE_PATH (dump_base_name))
{
@@ -1467,7 +1482,7 @@ print_specific_help (unsigned int include_flags,
static int
common_handle_option (size_t scode, const char *arg, int value,
- unsigned int lang_mask)
+ unsigned int lang_mask, int kind ATTRIBUTE_UNUSED)
{
static bool verbose = false;
enum opt_code code = (enum opt_code) scode;
@@ -2376,8 +2391,10 @@ get_option_state (int option, struct cl_option_state *state)
/* Set *OPTION according to VALUE and ARG. */
void
-set_option (const struct cl_option *option, int value, const char *arg)
+set_option (int opt_index, int value, const char *arg, int kind)
{
+ const struct cl_option *option = &cl_options[opt_index];
+
if (!option->flag_var)
return;
@@ -2407,6 +2424,9 @@ set_option (const struct cl_option *option, int value, const char *arg)
*(const char **) option->flag_var = arg;
break;
}
+
+ if ((diagnostic_t)kind != DK_UNSPECIFIED)
+ diagnostic_classify_diagnostic (global_dc, opt_index, (diagnostic_t)kind);
}
@@ -2450,8 +2470,8 @@ enable_warning_as_error (const char *arg, int value, unsigned int lang_mask)
const struct cl_option * const option = cl_options + option_index;
/* -Werror=foo implies -Wfoo. */
- if (option->var_type == CLVC_BOOLEAN && option->flag_var)
- *(int *) option->flag_var = 1;
+ if (option->var_type == CLVC_BOOLEAN)
+ handle_option (option_index, value, arg, lang_mask, (int)kind);
if (warning_as_error_callback)
warning_as_error_callback (option_index);
diff --git a/gcc/opts.h b/gcc/opts.h
index 54f57d114a3..af3c6e2abe6 100644
--- a/gcc/opts.h
+++ b/gcc/opts.h
@@ -103,8 +103,9 @@ extern void prune_options (int *argcp, char ***argvp);
extern void decode_options (unsigned int argc, const char **argv);
extern int option_enabled (int opt_idx);
extern bool get_option_state (int, struct cl_option_state *);
-extern void set_option (const struct cl_option *, int, const char *);
-
+extern void set_option (int opt_index, int value, const char *arg, int);
+bool handle_option (int opt_index, int value, const char *arg,
+ unsigned int lang_mask, int kind);
extern void register_warning_as_error_callback (void (*callback) (int));
extern void enable_warning_as_error (const char *arg, int value,
unsigned int lang_mask);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2eebcf397d1..6b4584e5e7a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2010-05-06 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 40989
+ * gcc.dg/pr40989.c: New.
+
2010-05-06 Richard Guenther <rguenther@suse.de>
PR tree-optimization/43934
diff --git a/gcc/testsuite/gcc.dg/pr40989.c b/gcc/testsuite/gcc.dg/pr40989.c
new file mode 100644
index 00000000000..0fbc87082d3
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr40989.c
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-Werror=implicit" } */
+int main() {
+ return pippo(); /* { dg-error "" } */
+}
+/* { dg-message "warnings being treated as errors" "" { target *-*-* } 0 } */