options.texi (SeparateAlias): Document.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 3 Sep 2010 21:00:05 +0000 (22:00 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Fri, 3 Sep 2010 21:00:05 +0000 (22:00 +0100)
* 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

17 files changed:
gcc/ChangeLog
gcc/common.opt
gcc/config.gcc
gcc/config/i386/darwin.opt [new file with mode: 0644]
gcc/config/mips/sde.h
gcc/config/mips/sde.opt [new file with mode: 0644]
gcc/defaults.h
gcc/doc/options.texi
gcc/gcc.c
gcc/java/ChangeLog
gcc/java/lang.opt
gcc/opt-functions.awk
gcc/opth-gen.awk
gcc/opts-common.c
gcc/opts.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/opts-4.c [new file with mode: 0644]

index 19b86e1..6e30c00 100644 (file)
@@ -1,3 +1,27 @@
+2010-09-03  Joseph Myers  <joseph@codesourcery.com>
+
+       * 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  <sebastian.pop@amd.com>
 
        * tree-data-ref.c (dr_may_alias_p): Replace !DR_IS_READ with
index c5be49e..e915ee3 100644 (file)
@@ -543,6 +543,9 @@ fdump-
 Common Joined RejectNegative
 -fdump-<type>  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
index 5919ac5..d33d1c6 100644 (file)
@@ -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 (file)
index 0000000..89726d8
--- /dev/null
@@ -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
+; <http://www.gnu.org/licenses/>.
+
+mdynamic-no-pic
+Target RejectNegative Ignore
index d2a3296..29eaccc 100644 (file)
@@ -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}}",      \
-  "%<mno-data-in-code %<mcode-xonly",                                  \
-                                                                       \
   /* Configuration-independent MIPS rules.  */                         \
   BASE_DRIVER_SELF_SPECS                               
 
diff --git a/gcc/config/mips/sde.opt b/gcc/config/mips/sde.opt
new file mode 100644 (file)
index 0000000..61b0ebe
--- /dev/null
@@ -0,0 +1,28 @@
+; MIPS SDE options.
+;
+; 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
+; <http://www.gnu.org/licenses/>.
+
+; -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)
index aaf6ea6..e30ec17 100644 (file)
@@ -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.  */
 
index d7a18af..c224bbd 100644 (file)
@@ -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
index 61afb74..479d7da 100644 (file)
--- 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++];
index 3da5013..2866cf9 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-03  Joseph Myers  <joseph@codesourcery.com>
+
+       * lang.opt (d): New.
+
 2010-09-03  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR java/45504
index af1dff1..7350ccb 100644 (file)
@@ -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=)
 
index 94816a2..ed65d93 100644 (file)
@@ -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") \
index 4f765c2..0d1d0df 100644 (file)
@@ -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 " */"
        }
 
index 40822a7..8299edd 100644 (file)
@@ -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;
 
index 09e305b..ed175e5 100644 (file)
@@ -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.  */
index 0ed873d..9834ddd 100644 (file)
@@ -1,3 +1,7 @@
+2010-09-03  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/opts-4.c: New test.
+
 2010-09-03  Steve Ellcey  <sje@cup.hp.com>
 
        * 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 (file)
index 0000000..11bfbed
--- /dev/null
@@ -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 "*" } } */