summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authormanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-11 12:23:50 +0000
committermanu <manu@138bc75d-0d04-0410-961f-82ee72b054a4>2012-05-11 12:23:50 +0000
commitfbb6fbd8cdbfa154ef6da31768c93d48a03a146b (patch)
tree1a38b4f6902dc5e5cc35971539a25051202efa2e /gcc
parentf634c3e9e6fb44109149673db20197d6fad93419 (diff)
downloadgcc-fbb6fbd8cdbfa154ef6da31768c93d48a03a146b.tar.gz
2012-05-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
PR 53063 gcc/ * doc/options.texi (EnabledBy): Document * opts.c: Include opts.h and options.h before tm.h. (finish_options): Do not handle some sub-options here... (common_handle_option): ... instead call common_handle_option_auto here. * optc-gen.awk: Handle EnabledBy. * opth-gen.awk: Declare common_handle_option_auto. * common.opt (Wuninitialized): Use EnabledBy. Delete Init. (Wmaybe-uninitialized): Likewise. (Wunused-but-set-variable): Likewise. (Wunused-function): Likewise. (Wunused-label): Likewise. (Wunused-value): Likewise. (Wunused-variable): Likewise. * opt-read.awk: Create opt_numbers array. ada/ * gcc-interface/misc.c (gnat_parse_file): Move before ... (gnat_handle_option): ... this. Use handle_generated_option. c-family/ * c-opts.c (c_common_handle_option): Use handle_generated_option to enable sub-options. fortran/ * options.c: Include diagnostics.h instead of diagnostics-core.h. (set_Wall): Do not see warn_unused here. (gfc_handle_option): Set it here using handle_generated_option. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187403 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog18
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/gcc-interface/misc.c21
-rw-r--r--gcc/c-family/ChangeLog6
-rw-r--r--gcc/c-family/c-opts.c5
-rw-r--r--gcc/common.opt14
-rw-r--r--gcc/doc/options.texi2
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/options.c7
-rw-r--r--gcc/opt-read.awk3
-rw-r--r--gcc/optc-gen.awk64
-rw-r--r--gcc/opth-gen.awk15
-rw-r--r--gcc/opts.c30
13 files changed, 154 insertions, 45 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c5d733aa88c..c9f7f499b74 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,21 @@
+2012-05-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 53063
+ * doc/options.texi (EnabledBy): Document
+ * opts.c: Include opts.h and options.h before tm.h.
+ (finish_options): Do not handle some sub-options here...
+ (common_handle_option): ... instead call common_handle_option_auto here.
+ * optc-gen.awk: Handle EnabledBy.
+ * opth-gen.awk: Declare common_handle_option_auto.
+ * common.opt (Wuninitialized): Use EnabledBy. Delete Init.
+ (Wmaybe-uninitialized): Likewise.
+ (Wunused-but-set-variable): Likewise.
+ (Wunused-function): Likewise.
+ (Wunused-label): Likewise.
+ (Wunused-value): Likewise.
+ (Wunused-variable): Likewise.
+ * opt-read.awk: Create opt_numbers array.
+
2012-05-11 Richard Guenther <rguenther@suse.de>
PR tree-optimization/53295
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d24810fed89..537b39e98ca 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 53063
+ * gcc-interface/misc.c (gnat_parse_file): Move before ...
+ (gnat_handle_option): ... this. Use handle_generated_option.
+
2012-05-10 Richard Guenther <rguenther@suse.de>
* gcc-interface/cuintp.c (UI_From_gnu): Remove TYPE_IS_SIZETYPE use.
diff --git a/gcc/ada/gcc-interface/misc.c b/gcc/ada/gcc-interface/misc.c
index 974827a787f..ad15f672423 100644
--- a/gcc/ada/gcc-interface/misc.c
+++ b/gcc/ada/gcc-interface/misc.c
@@ -105,6 +105,14 @@ gnat_parse_file (void)
_ada_gnat1drv ();
}
+/* Return language mask for option processing. */
+
+static unsigned int
+gnat_option_lang_mask (void)
+{
+ return CL_Ada;
+}
+
/* Decode all the language specific options that cannot be decoded by GCC.
The option decoding phase of GCC calls this routine on the flags that
are marked as Ada-specific. Return true on success or false on failure. */
@@ -119,7 +127,10 @@ gnat_handle_option (size_t scode, const char *arg ATTRIBUTE_UNUSED, int value,
switch (code)
{
case OPT_Wall:
- warn_unused = value;
+ handle_generated_option (&global_options, &global_options_set,
+ OPT_Wunused, NULL, value,
+ gnat_option_lang_mask (), kind, loc,
+ handlers, global_dc);
warn_uninitialized = value;
warn_maybe_uninitialized = value;
break;
@@ -145,14 +156,6 @@ gnat_handle_option (size_t scode, const char *arg ATTRIBUTE_UNUSED, int value,
return true;
}
-/* Return language mask for option processing. */
-
-static unsigned int
-gnat_option_lang_mask (void)
-{
- return CL_Ada;
-}
-
/* Initialize options structure OPTS. */
static void
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog
index a01f3eaef45..2c85d515f07 100644
--- a/gcc/c-family/ChangeLog
+++ b/gcc/c-family/ChangeLog
@@ -1,3 +1,9 @@
+2012-05-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 53063
+ * c-opts.c (c_common_handle_option): Use handle_generated_option
+ to enable sub-options.
+
2012-05-10 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/53158
diff --git a/gcc/c-family/c-opts.c b/gcc/c-family/c-opts.c
index 2510747c40e..7d8ee6b334f 100644
--- a/gcc/c-family/c-opts.c
+++ b/gcc/c-family/c-opts.c
@@ -360,7 +360,10 @@ c_common_handle_option (size_t scode, const char *arg, int value,
break;
case OPT_Wall:
- warn_unused = value;
+ handle_generated_option (&global_options, &global_options_set,
+ OPT_Wunused, NULL, value,
+ c_family_lang_mask, kind, loc,
+ handlers, global_dc);
set_Wformat (value);
handle_generated_option (&global_options, &global_options_set,
OPT_Wimplicit, NULL, value,
diff --git a/gcc/common.opt b/gcc/common.opt
index c25713b31a1..375c10d713e 100644
--- a/gcc/common.opt
+++ b/gcc/common.opt
@@ -650,11 +650,11 @@ Common Var(warn_type_limits) Init(-1) Warning
Warn if a comparison is always true or always false due to the limited range of the data type
Wuninitialized
-Common Var(warn_uninitialized) Init(-1) Warning
+Common Var(warn_uninitialized) Warning EnabledBy(Wextra)
Warn about uninitialized automatic variables
Wmaybe-uninitialized
-Common Var(warn_maybe_uninitialized) Warning
+Common Var(warn_maybe_uninitialized) Warning EnabledBy(Wuninitialized)
Warn about maybe uninitialized automatic variables
Wunreachable-code
@@ -670,15 +670,15 @@ Common Var(warn_unused_but_set_parameter) Init(-1) Warning
Warn when a function parameter is only set, otherwise unused
Wunused-but-set-variable
-Common Var(warn_unused_but_set_variable) Init(-1) Warning
+Common Var(warn_unused_but_set_variable) Warning EnabledBy(Wunused)
Warn when a variable is only set, otherwise unused
Wunused-function
-Common Var(warn_unused_function) Init(-1) Warning
+Common Var(warn_unused_function) Warning EnabledBy(Wunused)
Warn when a function is unused
Wunused-label
-Common Var(warn_unused_label) Init(-1) Warning
+Common Var(warn_unused_label) Warning EnabledBy(Wunused)
Warn when a label is unused
Wunused-parameter
@@ -686,11 +686,11 @@ Common Var(warn_unused_parameter) Init(-1) Warning
Warn when a function parameter is unused
Wunused-value
-Common Var(warn_unused_value) Init(-1) Warning
+Common Var(warn_unused_value) Warning EnabledBy(Wunused)
Warn when an expression value is unused
Wunused-variable
-Common Var(warn_unused_variable) Init(-1) Warning
+Common Var(warn_unused_variable) Warning EnabledBy(Wunused)
Warn when a variable is unused
Wcoverage-mismatch
diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi
index 08b8b793a04..360cbdfb662 100644
--- a/gcc/doc/options.texi
+++ b/gcc/doc/options.texi
@@ -459,4 +459,6 @@ combined option. For example, some front ends use this to prevent
value of @option{-fmath-errno} for languages that do not use
@code{errno}.
+@item EnabledBy(@var{opt})
+If not explicitly set, the option is set to the value of @option{-@var{opt}}.
@end table
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b26b5c72735..a488dcac567 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+2012-05-11 Manuel López-Ibáñez <manu@gcc.gnu.org>
+
+ PR 53063
+ * options.c: Include diagnostics.h instead of
+ diagnostics-core.h.
+ (set_Wall): Do not see warn_unused here.
+ (gfc_handle_option): Set it here using handle_generated_option.
+
2012-05-08 Jan Hubicka <jh@suse.cz>
* trans-common.c (create_common): Do not fake TREE_ASM_WRITTEN.
diff --git a/gcc/fortran/options.c b/gcc/fortran/options.c
index dde7ff2f382..32a8a4cb464 100644
--- a/gcc/fortran/options.c
+++ b/gcc/fortran/options.c
@@ -34,7 +34,7 @@ along with GCC; see the file COPYING3. If not see
#include "gfortran.h"
#include "target.h"
#include "cpp.h"
-#include "diagnostic-core.h" /* For sorry. */
+#include "diagnostic.h" /* For global_dc. */
#include "tm.h"
gfc_option_t gfc_option;
@@ -474,7 +474,6 @@ set_Wall (int setting)
gfc_option.warn_real_q_constant = setting;
gfc_option.warn_unused_dummy_argument = setting;
- warn_unused = setting;
warn_return_type = setting;
warn_switch = setting;
warn_uninitialized = setting;
@@ -612,6 +611,10 @@ gfc_handle_option (size_t scode, const char *arg, int value,
break;
case OPT_Wall:
+ handle_generated_option (&global_options, &global_options_set,
+ OPT_Wunused, NULL, value,
+ gfc_option_lang_mask (), kind, loc,
+ handlers, global_dc);
set_Wall (value);
break;
diff --git a/gcc/opt-read.awk b/gcc/opt-read.awk
index 6a4d4de0eb4..81c3ea894d9 100644
--- a/gcc/opt-read.awk
+++ b/gcc/opt-read.awk
@@ -1,4 +1,4 @@
-# Copyright (C) 2003,2004,2005,2006,2007,2008, 2010, 2011
+# Copyright (C) 2003,2004,2005,2006,2007,2008, 2010, 2011, 2012
# Free Software Foundation, Inc.
# Contributed by Kelley Cook, June 2004.
# Original code from Neil Booth, May 2003.
@@ -108,6 +108,7 @@ BEGIN {
name = opt_args("Mask", $1)
if (name == "") {
opts[n_opts] = $1
+ opt_numbers[$1] = n_opts
flags[n_opts] = $2
help[n_opts] = $3
for (i = 4; i <= NF; i++)
diff --git a/gcc/optc-gen.awk b/gcc/optc-gen.awk
index e28c397f48a..4dc97f9ca6a 100644
--- a/gcc/optc-gen.awk
+++ b/gcc/optc-gen.awk
@@ -1,4 +1,4 @@
-# Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010, 2011
+# Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation, Inc.
# Contributed by Kelley Cook, June 2004.
# Original code from Neil Booth, May 2003.
@@ -324,4 +324,66 @@ for (i = 0; i < n_opts; i++) {
print "};"
+print "\n\n"
+print "bool "
+print "common_handle_option_auto (struct gcc_options *opts, "
+print " struct gcc_options *opts_set, "
+print " const struct cl_decoded_option *decoded, "
+print " unsigned int lang_mask, int kind, "
+print " location_t loc, "
+print " const struct cl_option_handlers *handlers, "
+print " diagnostic_context *dc) "
+print "{ "
+print " size_t scode = decoded->opt_index; "
+print " int value = decoded->value; "
+print " enum opt_code code = (enum opt_code) scode; "
+print " "
+print " gcc_assert (decoded->canonical_option_num_elements <= 2); "
+print " "
+print " switch (code) "
+print " { "
+n_enabledby = 0;
+for (i = 0; i < n_opts; i++) {
+ # With identical flags, pick only the last one. The
+ # earlier loop ensured that it has all flags merged,
+ # and a nonempty help text if one of the texts was nonempty.
+ while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
+ i++;
+ }
+ enabledby_arg = opt_args("EnabledBy", flags[i]);
+ if (enabledby_arg != "") {
+ enabledby_name = enabledby_arg;
+ enabledby_index = opt_numbers[enabledby_name];
+ if (enabledby_index == "") {
+ print "#error Enabledby: " enabledby_name
+ } else {
+ enabledby_var_name = var_name(flags[enabledby_index]);
+ if (enables[enabledby_name] == "") {
+ enabledby[n_enabledby] = enabledby_name;
+ n_enabledby++;
+ }
+ enables[enabledby_name] = enables[enabledby_name] opts[i] ",";
+ }
+ }
+}
+for (i = 0; i < n_enabledby; i++) {
+ enabledby_name = enabledby[i];
+ print " case " opt_enum(enabledby_name) ":"
+ n_enables = split(enables[enabledby_name], thisenable, ",");
+ for (j = 1; j < n_enables; j++) {
+ opt_var_name = var_name(flags[opt_numbers[thisenable[j]]]);
+ print " if (!opts_set->x_" opt_var_name ")"
+ print " handle_generated_option (opts, opts_set,"
+ print " " opt_enum(thisenable[j]) ", NULL, value,"
+ print " lang_mask, kind, loc, handlers, dc);"
+ }
+ print " break;\n"
+
+}
+print " default: "
+print " break; "
+print " } "
+print " return true; "
+print "} "
+
}
diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk
index a600b30502b..8257587e1b3 100644
--- a/gcc/opth-gen.awk
+++ b/gcc/opth-gen.awk
@@ -1,4 +1,4 @@
-# Copyright (C) 2003,2004,2005,2006,2007,2008, 2010, 2011
+# Copyright (C) 2003,2004,2005,2006,2007,2008, 2010, 2011, 2012
# Free Software Foundation, Inc.
# Contributed by Kelley Cook, June 2004.
# Original code from Neil Booth, May 2003.
@@ -293,6 +293,19 @@ print "extern void cl_target_option_restore (struct gcc_options *, struct cl_tar
print "";
print "/* Print target option variables from a structure. */";
print "extern void cl_target_option_print (FILE *, int, struct cl_target_option *);";
+print "";
+print "/* Anything that includes tm.h, does not necessarily need this. */"
+print "#if !defined(GCC_TM_H)"
+print "#include \"input.h\" /* for location_t */"
+print "bool "
+print "common_handle_option_auto (struct gcc_options *opts, "
+print " struct gcc_options *opts_set, "
+print " const struct cl_decoded_option *decoded, "
+print " unsigned int lang_mask, int kind, "
+print " location_t loc, "
+print " const struct cl_option_handlers *handlers, "
+print " diagnostic_context *dc); "
+print "#endif";
print "#endif";
print "";
diff --git a/gcc/opts.c b/gcc/opts.c
index b6c786f950e..ac43d4a2da7 100644
--- a/gcc/opts.c
+++ b/gcc/opts.c
@@ -1,5 +1,7 @@
/* Command line option handling.
- Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011,
+ 2012
+
Free Software Foundation, Inc.
Contributed by Neil Booth.
@@ -23,11 +25,11 @@ along with GCC; see the file COPYING3. If not see
#include "system.h"
#include "intl.h"
#include "coretypes.h"
+#include "opts.h"
+#include "options.h"
#include "tm.h" /* For STACK_CHECK_BUILTIN,
STACK_CHECK_STATIC_BUILTIN, DEFAULT_GDB_EXTENSIONS,
DWARF2_DEBUGGING_INFO and DBX_DEBUGGING_INFO. */
-#include "opts.h"
-#include "options.h"
#include "flags.h"
#include "params.h"
#include "diagnostic.h"
@@ -815,33 +817,18 @@ finish_options (struct gcc_options *opts, struct gcc_options *opts_set,
opts->x_param_values, opts_set->x_param_values);
/* This replaces set_Wunused. */
- if (opts->x_warn_unused_function == -1)
- opts->x_warn_unused_function = opts->x_warn_unused;
- if (opts->x_warn_unused_label == -1)
- opts->x_warn_unused_label = opts->x_warn_unused;
/* Wunused-parameter is enabled if both -Wunused -Wextra are enabled. */
if (opts->x_warn_unused_parameter == -1)
opts->x_warn_unused_parameter = (opts->x_warn_unused
&& opts->x_extra_warnings);
- if (opts->x_warn_unused_variable == -1)
- opts->x_warn_unused_variable = opts->x_warn_unused;
/* Wunused-but-set-parameter is enabled if both -Wunused -Wextra are
enabled. */
if (opts->x_warn_unused_but_set_parameter == -1)
opts->x_warn_unused_but_set_parameter = (opts->x_warn_unused
&& opts->x_extra_warnings);
- if (opts->x_warn_unused_but_set_variable == -1)
- opts->x_warn_unused_but_set_variable = opts->x_warn_unused;
- if (opts->x_warn_unused_value == -1)
- opts->x_warn_unused_value = opts->x_warn_unused;
-
/* Wunused-local-typedefs is enabled by -Wunused or -Wall. */
if (opts->x_warn_unused_local_typedefs == -1)
opts->x_warn_unused_local_typedefs = opts->x_warn_unused;
-
- /* This replaces set_Wextra. */
- if (opts->x_warn_uninitialized == -1)
- opts->x_warn_uninitialized = opts->x_extra_warnings;
}
#define LEFT_COLUMN 27
@@ -1745,11 +1732,6 @@ common_handle_option (struct gcc_options *opts,
/* No-op. Used by the driver and passed to us because it starts with f.*/
break;
- case OPT_Wuninitialized:
- /* Also turn on maybe uninitialized warning. */
- opts->x_warn_maybe_uninitialized = value;
- break;
-
default:
/* If the flag was handled in a standard way, assume the lack of
processing here is intentional. */
@@ -1757,6 +1739,8 @@ common_handle_option (struct gcc_options *opts,
break;
}
+ common_handle_option_auto (opts, opts_set, decoded, lang_mask, kind,
+ loc, handlers, dc);
return true;
}