c-opts.c (CL_REJECT_NEGATIVE): New.
authorNeil Booth <neil@daikokuya.co.uk>
Mon, 2 Jun 2003 05:48:30 +0000 (05:48 +0000)
committerNeil Booth <neil@gcc.gnu.org>
Mon, 2 Jun 2003 05:48:30 +0000 (05:48 +0000)
* c-opts.c (CL_REJECT_NEGATIVE): New.
(c_common_decode_option): Update to use it.
* c.opt: Update documentation; use RejectNegative.
* opts.sh: Handle RejectNegative.

From-SVN: r67325

gcc/ChangeLog
gcc/c-opts.c
gcc/c.opt
gcc/opts.sh

index 38bbc664eadff5c9a09baf8ab3355954218a3ef0..16164f84b9747b4f874643e141ccea5a71251007 100644 (file)
@@ -1,3 +1,10 @@
+2003-06-02  Neil Booth  <neil@daikokuya.co.uk>
+
+       * c-opts.c (CL_REJECT_NEGATIVE): New.
+       (c_common_decode_option): Update to use it.
+       * c.opt: Update documentation; use RejectNegative.
+       * opts.sh: Handle RejectNegative.
+
 2003-06-01  Zack Weinberg  <zack@codesourcery.com>
 
        * ggc-page.c (init_ggc): Give better diagnostics on failure to
index 8cb0b83f21043ba60fbca3b540d17598ecebb5c6..bd02e199079437b7c17509e7f3cc5ae6ce701029 100644 (file)
@@ -119,12 +119,13 @@ static void finish_options PARAMS ((void));
 #define STDC_0_IN_SYSTEM_HEADERS 0
 #endif
 
-#define CL_C           (1 << 0) /* Only C.  */
-#define CL_OBJC                (1 << 1) /* Only ObjC.  */
-#define CL_CXX         (1 << 2) /* Only C++.  */
-#define CL_OBJCXX      (1 << 3) /* Only ObjC++.  */
-#define CL_JOINED      (1 << 4) /* If takes joined argument.  */
-#define CL_SEPARATE    (1 << 5) /* If takes a separate argument.  */
+#define CL_C                   (1 << 0) /* Only C.  */
+#define CL_OBJC                        (1 << 1) /* Only ObjC.  */
+#define CL_CXX                 (1 << 2) /* Only C++.  */
+#define CL_OBJCXX              (1 << 3) /* Only ObjC++.  */
+#define CL_JOINED              (1 << 4) /* If takes joined argument.  */
+#define CL_SEPARATE            (1 << 5) /* If takes a separate argument.  */
+#define CL_REJECT_NEGATIVE     (1 << 6) /* Reject no- form.  */
 
 #include "c-options.c"
 
@@ -398,9 +399,15 @@ c_common_decode_option (argc, argv)
   if (opt_index == N_OPTS)
     goto done;
 
-  result = 1;
   option = &cl_options[opt_index];
 
+  /* Reject negative form of switches that don't take negatives.  */
+  if (!on && (option->flags & CL_REJECT_NEGATIVE))
+    goto done;
+
+  /* We've recognised this switch.  */
+  result = 1;
+
   /* Sort out any argument the switch takes.  */
   if (option->flags & (CL_JOINED | CL_SEPARATE))
     {
@@ -629,10 +636,7 @@ c_common_decode_option (argc, argv)
       break;
 
     case OPT_Werror_implicit_function_declaration:
-      if (!on)
-       result = 0;
-      else
-       mesg_implicit_function_declaration = 2;
+      mesg_implicit_function_declaration = 2;
       break;
 
     case OPT_Wfloat_equal:
@@ -908,7 +912,7 @@ c_common_decode_option (argc, argv)
       break;
 
     case OPT_fdump_:
-      if (!on || !dump_switch_p (argv[0] + strlen ("-f")))
+      if (!dump_switch_p (argv[0] + strlen ("-f")))
        result = 0;
       break;
 
@@ -1072,10 +1076,6 @@ c_common_decode_option (argc, argv)
       break;
 
     case OPT_ftabstop_:
-      /* Don't recognize -fno-tabstop=.  */
-      if (!on)
-       return 0;
-
       /* It is documented that we silently ignore silly values.  */
        {
          char *endptr;
index c09104ee81a2b180935af47cd6a692a9a6956dc2..6cd9295dafc4b580fd5f73397a2e7b51ee3229e9 100644 (file)
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -24,7 +24,9 @@
 ; and each field appearing on its own line.  The first field is the
 ; command-line switch with the leading "-" removed.  All options
 ; beginning with "f" or "W" are implicitly assumed to take a "no-"
-; form; this form should not be listed.
+; form; this form should not be listed.  If you do not want this
+; negative form and you want it to be automatically rejected, add
+; RejectNegative to the second field.
 
 ; The second field is a space-separated list of which parts of the
 ; compiler recognize the switch.  Current valid entries are "C",
@@ -144,7 +146,7 @@ Werror
 C ObjC C++ ObjC++
 
 Werror-implicit-function-declaration
-C ObjC
+C ObjC RejectNegative
 
 Wfloat-equal
 C ObjC C++ ObjC++
@@ -339,7 +341,7 @@ fdollars-in-identifiers
 C ObjC C++ ObjC++
 
 fdump-
-C ObjC C++ ObjC++ Joined
+C ObjC C++ ObjC++ Joined RejectNegative
 
 felide-constructors
 C++ ObjC++
@@ -465,7 +467,7 @@ fstrict-prototype
 C++ ObjC++
 
 ftabstop=
-C ObjC C++ ObjC++ Joined
+C ObjC C++ ObjC++ Joined RejectNegative
 
 ftemplate-depth-
 C++ ObjC++ Joined
index 9a4df53c696019bb3586d56206f774ad7d8546ad..4056946df10912130505ac1cb41dc146f23a8e78 100644 (file)
@@ -48,8 +48,9 @@ cat "$@" | ${AWK} '
         if (langs ~ ":ObjC:") flags = flags " | CL_OBJC"
         if (langs ~ ":C\\+\\+:") flags = flags " | CL_CXX"
         if (langs ~ ":ObjC\\+\\+:") flags = flags " | CL_OBJCXX"
-        if (langs ~ ":Joined") flags = flags " | CL_JOINED"
-        if (langs ~ ":Separate") flags = flags " | CL_SEPARATE"
+        if (langs ~ ":Joined:") flags = flags " | CL_JOINED"
+        if (langs ~ ":Separate:") flags = flags " | CL_SEPARATE"
+        if (langs ~ ":RejectNegative:") flags = flags " | CL_REJECT_NEGATIVE"
        sub( "^0 \\| ", "", flags )
        return flags
     }