From d158303227fdca143db5decf983978f635be2ba9 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Fri, 3 Sep 2010 22:00:05 +0100 Subject: [PATCH] options.texi (SeparateAlias): Document. * doc/options.texi (SeparateAlias): Document. * opt-functions.awk (switch_flags): Handle SeparateAlias. * opth-gen.awk: Generate enumeration names for options marked SeparateAlias, but not for those marked Ignore. * opts-common.c (generate_canonical_option): Don't output separate argument for options marked CL_SEPARATE_ALIAS. (decode_cmdline_option): Handle CL_SEPARATE_ALIAS. * opts.h (CL_SEPARATE_ALIAS): New. (CL_PARAMS, CL_WARNING, CL_OPTIMIZATION, CL_DRIVER, CL_TARGET, CL_COMMON): Adjust definitions. * config/i386/darwin.opt, config/mips/sde.opt: New. * common.opt (fdump-final-insns): New. * config.gcc (i[34567]86-*-darwin*, x86_64-*-darwin*): Add i386/darwin.opt. (mips*-sde-elf*): Add mips/sde.opt. * config/mips/sde.h (DRIVER_SELF_SPECS): Don't handle -mno-data-in-code and -mcode-xonly here. * defaults.h (DEFAULT_SWITCH_TAKES_ARG): Add 'd'. * gcc.c (option_map): Add "j" to --dump entry. (translate_options): Don't translate -d to -foutput-class-dir= here. java: * lang.opt (d): New. testsuite: * gcc.dg/opts-4.c: New test. From-SVN: r163844 --- gcc/ChangeLog | 24 ++++++++++++++++++++++++ gcc/common.opt | 3 +++ gcc/config.gcc | 3 +++ gcc/config/i386/darwin.opt | 22 ++++++++++++++++++++++ gcc/config/mips/sde.h | 9 +-------- gcc/config/mips/sde.opt | 28 ++++++++++++++++++++++++++++ gcc/defaults.h | 2 +- gcc/doc/options.texi | 7 +++++++ gcc/gcc.c | 12 +----------- gcc/java/ChangeLog | 4 ++++ gcc/java/lang.opt | 4 ++++ gcc/opt-functions.awk | 1 + gcc/opth-gen.awk | 4 +++- gcc/opts-common.c | 11 +++++++++-- gcc/opts.h | 13 +++++++------ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gcc.dg/opts-4.c | 9 +++++++++ 17 files changed, 131 insertions(+), 29 deletions(-) create mode 100644 gcc/config/i386/darwin.opt create mode 100644 gcc/config/mips/sde.opt create mode 100644 gcc/testsuite/gcc.dg/opts-4.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 19b86e1..6e30c00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,27 @@ +2010-09-03 Joseph Myers + + * doc/options.texi (SeparateAlias): Document. + * opt-functions.awk (switch_flags): Handle SeparateAlias. + * opth-gen.awk: Generate enumeration names for options marked + SeparateAlias, but not for those marked Ignore. + * opts-common.c (generate_canonical_option): Don't output separate + argument for options marked CL_SEPARATE_ALIAS. + (decode_cmdline_option): Handle CL_SEPARATE_ALIAS. + * opts.h (CL_SEPARATE_ALIAS): New. + (CL_PARAMS, CL_WARNING, CL_OPTIMIZATION, CL_DRIVER, CL_TARGET, + CL_COMMON): Adjust definitions. + * config/i386/darwin.opt, config/mips/sde.opt: New. + * common.opt (fdump-final-insns): New. + * config.gcc (i[34567]86-*-darwin*, x86_64-*-darwin*): Add + i386/darwin.opt. + (mips*-sde-elf*): Add mips/sde.opt. + * config/mips/sde.h (DRIVER_SELF_SPECS): Don't handle + -mno-data-in-code and -mcode-xonly here. + * defaults.h (DEFAULT_SWITCH_TAKES_ARG): Add 'd'. + * gcc.c (option_map): Add "j" to --dump entry. + (translate_options): Don't translate -d to -foutput-class-dir= + here. + 2010-09-03 Sebastian Pop * tree-data-ref.c (dr_may_alias_p): Replace !DR_IS_READ with diff --git a/gcc/common.opt b/gcc/common.opt index c5be49e..e915ee3 100644 --- a/gcc/common.opt +++ b/gcc/common.opt @@ -543,6 +543,9 @@ fdump- Common Joined RejectNegative -fdump- Dump various compiler internals to a file +fdump-final-insns +Driver RejectNegative + fdump-final-insns= Common RejectNegative Joined Var(flag_dump_final_insns) -fdump-final-insns=filename Dump to filename the insns at the end of translation diff --git a/gcc/config.gcc b/gcc/config.gcc index 5919ac5..d33d1c6 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1135,12 +1135,14 @@ i[34567]86-*-darwin*) # support. with_cpu=${with_cpu:-generic} tmake_file="${tmake_file} t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" + extra_options="${extra_options} i386/darwin.opt" lto_binary_reader=lto-macho ;; x86_64-*-darwin*) with_cpu=${with_cpu:-generic} tmake_file="${tmake_file} ${cpu_type}/t-darwin64 t-slibgcc-darwin i386/t-crtpc i386/t-crtfm" tm_file="${tm_file} ${cpu_type}/darwin64.h" + extra_options="${extra_options} i386/darwin.opt" lto_binary_reader=lto-macho ;; i[34567]86-*-elf*) @@ -1811,6 +1813,7 @@ mips*-*-openbsd*) mips*-sde-elf*) tm_file="elfos.h newlib-stdint.h ${tm_file} mips/elf.h mips/sde.h" tmake_file="mips/t-sde mips/t-libgcc-mips16" + extra_options="${extra_options} mips/sde.opt" case "${with_newlib}" in yes) # newlib / libgloss. diff --git a/gcc/config/i386/darwin.opt b/gcc/config/i386/darwin.opt new file mode 100644 index 0000000..89726d8 --- /dev/null +++ b/gcc/config/i386/darwin.opt @@ -0,0 +1,22 @@ +; Darwin options for IA32 port. +; +; Copyright (C) 2010 Free Software Foundation, Inc. +; +; This file is part of GCC. +; +; GCC is free software; you can redistribute it and/or modify it under +; the terms of the GNU General Public License as published by the Free +; Software Foundation; either version 3, or (at your option) any later +; version. +; +; GCC is distributed in the hope that it will be useful, but WITHOUT +; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +; License for more details. +; +; You should have received a copy of the GNU General Public License +; along with GCC; see the file COPYING3. If not see +; . + +mdynamic-no-pic +Target RejectNegative Ignore diff --git a/gcc/config/mips/sde.h b/gcc/config/mips/sde.h index d2a3296..29eaccc 100644 --- a/gcc/config/mips/sde.h +++ b/gcc/config/mips/sde.h @@ -1,6 +1,6 @@ /* Definitions of target machine for GNU compiler. MIPS SDE version. - Copyright (C) 2003, 2004, 2007, 2008, 2009 + Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GCC. @@ -42,13 +42,6 @@ along with GCC; see the file COPYING3. If not see things like LINK_SPEC easier to write. */ \ "%{!EB:%{!EL:%(endian_spec)}}", \ \ - /* -mcode-xonly is a traditional alias for -mcode-readable=pcrel and \ - -mno-data-in-code is a traditional alias for -mcode-readable=no. \ - The latter trumps the former. */ \ - "%{mno-data-in-code: -mcode-readable=no}", \ - "%{!mcode-readable=no: %{mcode-xonly: -mcode-readable=pcrel}}", \ - "%. + +; -mcode-xonly is a traditional alias for -mcode-readable=pcrel and +; -mno-data-in-code is a traditional alias for -mcode-readable=no. + +mno-data-in-code +Target RejectNegative Alias(mcode-readable=, no) + +mcode-xonly +Target RejectNegative Alias(mcode-readable=, pcrel) diff --git a/gcc/defaults.h b/gcc/defaults.h index aaf6ea6..e30ec17 100644 --- a/gcc/defaults.h +++ b/gcc/defaults.h @@ -39,7 +39,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u' \ || (CHAR) == 'I' || (CHAR) == 'J' || (CHAR) == 'm' \ || (CHAR) == 'x' || (CHAR) == 'L' || (CHAR) == 'A' \ - || (CHAR) == 'B' ) + || (CHAR) == 'B' || (CHAR) == 'd') /* This defines which multi-letter switches take arguments. */ diff --git a/gcc/doc/options.texi b/gcc/doc/options.texi index d7a18af..c224bbd 100644 --- a/gcc/doc/options.texi +++ b/gcc/doc/options.texi @@ -278,6 +278,13 @@ This option is ignored apart from printing any warning specified using @code{Warn}. The option will not be seen by specs and no @samp{OPT_} enumeration value is defined for it. +@item SeparateAlias +For an option marked with @code{Joined}, @code{Separate} and +@code{Alias}, the option only acts as an alias when passed a separate +argument; with a joined argument it acts as a normal option, with an +@samp{OPT_} enumeration value. This is for compatibility with the +Java @option{-d} option and should not be used for new options. + @item Warn(@var{message}) If this option is used, output the warning @var{message}. @var{message} is a format string, either taking a single operand with diff --git a/gcc/gcc.c b/gcc/gcc.c index 61afb74..479d7da 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -1085,7 +1085,7 @@ static const struct option_map option_map[] = {"--debug", "-g", "oj"}, {"--define-macro", "-D", "aj"}, {"--dependencies", "-M", 0}, - {"--dump", "-d", "a"}, + {"--dump", "-d", "aj"}, {"--dumpbase", "-dumpbase", "a"}, {"--dumpdir", "-dumpdir", "a"}, {"--encoding", "-fencoding=", "aj"}, @@ -1368,16 +1368,6 @@ translate_options (int *argcp, const char *const **argvp) if (nskip + i > argc) nskip = argc - i; - /* Convert -d with a separate argument to - -foutput-class-dir= for Java. */ - if (c == 'd' && p[1] == 0 && argv[i + 1] != NULL) - { - newv[newindex++] = concat ("-foutput-class-dir=", argv[i + 1], - NULL); - nskip = 0; - i += 2; - } - while (nskip > 0) { newv[newindex++] = argv[i++]; diff --git a/gcc/java/ChangeLog b/gcc/java/ChangeLog index 3da5013..2866cf9 100644 --- a/gcc/java/ChangeLog +++ b/gcc/java/ChangeLog @@ -1,3 +1,7 @@ +2010-09-03 Joseph Myers + + * lang.opt (d): New. + 2010-09-03 H.J. Lu PR java/45504 diff --git a/gcc/java/lang.opt b/gcc/java/lang.opt index af1dff1..7350ccb 100644 --- a/gcc/java/lang.opt +++ b/gcc/java/lang.opt @@ -93,6 +93,10 @@ Java Separate Alias(fbootclasspath=) classpath Java Separate Alias(fclasspath=) +d +Java Separate SeparateAlias Alias(foutput-class-dir=) +; Different from language-independent -d with joined argument. + encoding Java Separate Alias(fencoding=) diff --git a/gcc/opt-functions.awk b/gcc/opt-functions.awk index 94816a2..ed65d93 100644 --- a/gcc/opt-functions.awk +++ b/gcc/opt-functions.awk @@ -81,6 +81,7 @@ function switch_flags (flags) test_flag("Driver", flags, " | CL_DRIVER") \ test_flag("RejectDriver", flags, " | CL_REJECT_DRIVER") \ test_flag("NoDriverArg", flags, " | CL_NO_DRIVER_ARG") \ + test_flag("SeparateAlias", flags, " | CL_SEPARATE_ALIAS") \ test_flag("Save", flags, " | CL_SAVE") \ test_flag("Joined", flags, " | CL_JOINED") \ test_flag("JoinedOrMissing", flags, " | CL_JOINED | CL_MISSING_OK") \ diff --git a/gcc/opth-gen.awk b/gcc/opth-gen.awk index 4f765c2..0d1d0df 100644 --- a/gcc/opth-gen.awk +++ b/gcc/opth-gen.awk @@ -334,7 +334,9 @@ for (i = 0; i < n_opts; i++) { enum_string = enum " = " enum_value "," # Aliases do not get enumeration names. - if (flag_set_p("Alias.*", flags[i])) { + if ((flag_set_p("Alias.*", flags[i]) \ + && !flag_set_p("SeparateAlias", flags[i])) \ + || flag_set_p("Ignore", flags[i])) { enum_string = "/* " enum_string " */" } diff --git a/gcc/opts-common.c b/gcc/opts-common.c index 40822a7..8299edd 100644 --- a/gcc/opts-common.c +++ b/gcc/opts-common.c @@ -174,7 +174,8 @@ generate_canonical_option (size_t opt_index, const char *arg, int value, if (arg) { - if (option->flags & CL_SEPARATE) + if ((option->flags & CL_SEPARATE) + && !(option->flags & CL_SEPARATE_ALIAS)) { decoded->canonical_option[0] = opt_text; decoded->canonical_option[1] = arg; @@ -217,6 +218,7 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, const char *warn_message = NULL; bool separate_arg_flag; bool joined_arg_flag; + bool have_separate_arg = false; opt = argv[0]; @@ -286,6 +288,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, result = 2; if (arg == NULL) result = 1; + else + have_separate_arg = true; } else /* Missing argument. */ @@ -298,6 +302,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, result = 2; if (arg == NULL) result = 1; + else + have_separate_arg = true; } if (arg == NULL && (separate_arg_flag || joined_arg_flag)) @@ -305,7 +311,8 @@ decode_cmdline_option (const char **argv, unsigned int lang_mask, /* Is this option an alias (or an ignored option, marked as an alias of OPT_SPECIAL_ignore)? */ - if (option->alias_target != N_OPTS) + if (option->alias_target != N_OPTS + && (!(option->flags & CL_SEPARATE_ALIAS) || have_separate_arg)) { size_t new_opt_index = option->alias_target; diff --git a/gcc/opts.h b/gcc/opts.h index 09e305b..ed175e5 100644 --- a/gcc/opts.h +++ b/gcc/opts.h @@ -71,12 +71,12 @@ extern const unsigned int cl_options_count; extern const char *const lang_names[]; extern const unsigned int cl_lang_count; -#define CL_PARAMS (1 << 14) /* Fake entry. Used to display --param info with --help. */ -#define CL_WARNING (1 << 15) /* Enables an (optional) warning message. */ -#define CL_OPTIMIZATION (1 << 16) /* Enables an (optional) optimization. */ -#define CL_DRIVER (1 << 17) /* Driver option. */ -#define CL_TARGET (1 << 18) /* Target-specific option. */ -#define CL_COMMON (1 << 19) /* Language-independent. */ +#define CL_PARAMS (1 << 13) /* Fake entry. Used to display --param info with --help. */ +#define CL_WARNING (1 << 14) /* Enables an (optional) warning message. */ +#define CL_OPTIMIZATION (1 << 15) /* Enables an (optional) optimization. */ +#define CL_DRIVER (1 << 16) /* Driver option. */ +#define CL_TARGET (1 << 17) /* Target-specific option. */ +#define CL_COMMON (1 << 18) /* Language-independent. */ #define CL_MIN_OPTION_CLASS CL_PARAMS #define CL_MAX_OPTION_CLASS CL_COMMON @@ -86,6 +86,7 @@ extern const unsigned int cl_lang_count; This distinction is important because --help will not list options which only have these higher bits set. */ +#define CL_SEPARATE_ALIAS (1 << 19) /* Option is an alias when used with separate argument. */ #define CL_NO_DRIVER_ARG (1 << 20) /* Option takes no argument in the driver. */ #define CL_REJECT_DRIVER (1 << 21) /* Reject this option in the driver. */ #define CL_SAVE (1 << 22) /* Target-specific option for attribute. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0ed873d..9834ddd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2010-09-03 Joseph Myers + + * gcc.dg/opts-4.c: New test. + 2010-09-03 Steve Ellcey * gcc.dg/vect/vect-peel-3.c: XFAIL if vect_no_align. diff --git a/gcc/testsuite/gcc.dg/opts-4.c b/gcc/testsuite/gcc.dg/opts-4.c new file mode 100644 index 0000000..11bfbed --- /dev/null +++ b/gcc/testsuite/gcc.dg/opts-4.c @@ -0,0 +1,9 @@ +/* --dump= should translate to -d with joined operand. */ +/* { dg-do compile } */ +/* { dg-options "--dump=a" } */ + +void f (void) +{ +} + +/* { dg-final { cleanup-rtl-dump "*" } } */ -- 2.7.4