]> git.saurik.com Git - bison.git/commitdiff
Finish implementing --warnings=error, which should not be implied by
authorJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 1 Nov 2006 01:47:44 +0000 (01:47 +0000)
committerJoel E. Denny <jdenny@ces.clemson.edu>
Wed, 1 Nov 2006 01:47:44 +0000 (01:47 +0000)
--warnings=all (or by its synonyms -W and --warnings without
subarguments).
* src/complain.c (set_warning_issued): New function to report that
warnings are being treated as errors and to record an error if so.
Invoke...
(warn_at, warn): ... here.
* src/getargs.c (warnings_args, warnings_types): Reorder so that
"error - warnings are errors" does not appear above "all - all of the
above".
(getargs): For -W and --warnings without subarguments, don't let
FLAGS_ARGMATCH set warnings_error in warnings_flag.
* src/getargs.h (enum warnings): Unset warnings_error in warnings_all.

ChangeLog
src/complain.c
src/getargs.c
src/getargs.h

index d64fa6bcd13e9321054540607550bb2edc3fcba0..549060558d166a031f815ac44fd5b20e6222f95c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
+
+       Finish implementing --warnings=error, which should not be implied by
+       --warnings=all (or by its synonyms -W and --warnings without
+       subarguments).
+       * src/complain.c (set_warning_issued): New function to report that
+       warnings are being treated as errors and to record an error if so.
+       Invoke...
+       (warn_at, warn): ... here.
+       * src/getargs.c (warnings_args, warnings_types): Reorder so that
+       "error - warnings are errors" does not appear above "all - all of the
+       above".
+       (getargs): For -W and --warnings without subarguments, don't let
+       FLAGS_ARGMATCH set warnings_error in warnings_flag.
+       * src/getargs.h (enum warnings): Unset warnings_error in warnings_all.
+
 2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        * src/getargs.c (flags_argmatch): Don't cause segmentation fault for
 2006-10-31  Joel E. Denny  <jdenny@ces.clemson.edu>
 
        * src/getargs.c (flags_argmatch): Don't cause segmentation fault for
index f3cd0ec1b6cdb4c72cd20e99693fc33123036be6..7428a4af2f50c95493116348e7d83930f5a94c7b 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "complain.h"
 #include "files.h"
 
 #include "complain.h"
 #include "files.h"
+#include "getargs.h"
 
 /* The calling program should define program_name and set it to the
    name of the executing program.  */
 
 /* The calling program should define program_name and set it to the
    name of the executing program.  */
@@ -79,15 +80,29 @@ error_message (location *loc,
 | Report a warning, and proceed.  |
 `--------------------------------*/
 
 | Report a warning, and proceed.  |
 `--------------------------------*/
 
+static void
+set_warning_issued (void)
+{
+  static bool warning_issued = false;
+  if (!warning_issued && (warnings_flag & warnings_error))
+    {
+      fprintf (stderr, "%s: warnings being treated as errors\n", program_name);
+      complaint_issued = true;
+    }
+  warning_issued = true;
+}
+
 void
 warn_at (location loc, const char *message, ...)
 {
 void
 warn_at (location loc, const char *message, ...)
 {
+  set_warning_issued ();
   ERROR_MESSAGE (&loc, _("warning"), message);
 }
 
 void
 warn (const char *message, ...)
 {
   ERROR_MESSAGE (&loc, _("warning"), message);
 }
 
 void
 warn (const char *message, ...)
 {
+  set_warning_issued ();
   ERROR_MESSAGE (NULL, _("warning"), message);
 }
 
   ERROR_MESSAGE (NULL, _("warning"), message);
 }
 
index 94d24329d716cdd0ea167be3135f96f30a20a2ec..c34efa2120b0ad190899f2e02a4b021c2ce26849 100644 (file)
@@ -204,18 +204,18 @@ static const char * const warnings_args[] =
   /* In a series of synonyms, present the most meaningful first, so
      that argmatch_valid be more readable.  */
   "none       - no warnings",
   /* In a series of synonyms, present the most meaningful first, so
      that argmatch_valid be more readable.  */
   "none       - no warnings",
-  "error      - warnings are errors",
   "yacc       - incompatibilities with POSIX YACC",
   "all        - all of the above",
   "yacc       - incompatibilities with POSIX YACC",
   "all        - all of the above",
+  "error      - warnings are errors",
   0
 };
 
 static const int warnings_types[] =
 {
   warnings_none,
   0
 };
 
 static const int warnings_types[] =
 {
   warnings_none,
-  warnings_error,
   warnings_yacc,
   warnings_yacc,
-  warnings_all
+  warnings_all,
+  warnings_error
 };
 
 ARGMATCH_VERIFY (warnings_args, warnings_types);
 };
 
 ARGMATCH_VERIFY (warnings_args, warnings_types);
@@ -472,7 +472,10 @@ getargs (int argc, char *argv[])
        break;
 
       case 'W':
        break;
 
       case 'W':
-       FLAGS_ARGMATCH (warnings, optarg);
+       if (optarg)
+         FLAGS_ARGMATCH (warnings, optarg);
+       else
+         warnings_flag |= warnings_all;
        break;
 
       case LOCATIONS_OPTION:
        break;
 
       case LOCATIONS_OPTION:
index d54a40b5b1c0d92d1b6fc03a771fbd1831f30d87..d0fa12f20dcb8279f4379b9ef885239ead92333c 100644 (file)
@@ -112,7 +112,7 @@ enum warnings
     warnings_none             = 0,      /**< Issue no warnings.  */
     warnings_error            = 1 << 0, /**< Warnings are treated as errors.  */
     warnings_yacc             = 1 << 1, /**< POSIXME.  */
     warnings_none             = 0,      /**< Issue no warnings.  */
     warnings_error            = 1 << 0, /**< Warnings are treated as errors.  */
     warnings_yacc             = 1 << 1, /**< POSIXME.  */
-    warnings_all              = ~0      /**< All of the above.  */
+    warnings_all              = ~warnings_error /**< All above warnings.  */
   };
 /** What warnings are issued.  */
 extern int warnings_flag;
   };
 /** What warnings are issued.  */
 extern int warnings_flag;