]> granicus.if.org Git - re2c/commitdiff
Now -Werror-<warning> turns on <warning> (unlike -Werror in general).
authorUlya Trofimovich <skvadrik@gmail.com>
Wed, 5 Aug 2015 09:33:55 +0000 (10:33 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Wed, 5 Aug 2015 09:33:55 +0000 (10:33 +0100)
At least GCC does so.

re2c/bootstrap/src/conf/parse_opts.cc
re2c/src/conf/parse_opts.re
re2c/src/conf/warn.cc
re2c/src/conf/warn.h

index ce4c30ceb59379efcc2dc5c77c2ad4e8c0abc594..d22a093d5b38a4c66d8d68bca100f7e0c9ac3588 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by re2c 0.14.3 on Thu Jul 30 14:53:05 2015 */
+/* Generated by re2c 0.14.3 on Tue Aug  4 21:08:00 2015 */
 #include <stdio.h>
 
 #include "src/conf/msg.h"
@@ -125,7 +125,7 @@ yy13:
        }
 yy15:
        ++YYCURSOR;
-       { warn.set_all (Warn::W);      goto opt; }
+       { warn.set_all ();       goto opt; }
 yy17:
        yych = *++YYCURSOR;
        if (yych == 'r') goto yy30;
@@ -177,7 +177,7 @@ yy30:
        { option = Warn::WERROR;   goto opt_warn; }
 yy36:
        ++YYCURSOR;
-       { warn.set_all (Warn::WERROR); goto opt; }
+       { warn.set_all_error (); goto opt; }
 yy38:
        ++YYCURSOR;
        yych = *YYCURSOR;
index b0ab34f0c2d93bbe8ba7ab428cb4156ad8ab08e5..8dca84356c67122d540737d22646080c999e6578 100644 (file)
@@ -59,8 +59,8 @@ opt:
        "-"  { goto opt_short; }
        "--" { goto opt_long; }
 
-       "-W"      end { warn.set_all (Warn::W);      goto opt; }
-       "-Werror" end { warn.set_all (Warn::WERROR); goto opt; }
+       "-W"      end { warn.set_all ();       goto opt; }
+       "-Werror" end { warn.set_all_error (); goto opt; }
        "-W"          { option = Warn::W;        goto opt_warn; }
        "-Wno-"       { option = Warn::WNO;      goto opt_warn; }
        "-Werror-"    { option = Warn::WERROR;   goto opt_warn; }
index f06263be506c8a78fa926c25d785c19efb092d4b..88e5896aa1cd456761be4fc6428ec936821d2664 100644 (file)
@@ -46,7 +46,8 @@ void Warn::set (type_t t, option_t o)
                        mask[t] &= ~WARNING;
                        break;
                case WERROR:
-                       mask[t] |= ERROR;
+                       // unlike -Werror, -Werror-<warning> implies -W<warning>
+                       mask[t] |= (WARNING | ERROR);
                        break;
                case WNOERROR:
                        mask[t] &= ~ERROR;
@@ -54,11 +55,21 @@ void Warn::set (type_t t, option_t o)
        }
 }
 
-void Warn::set_all (option_t o)
+void Warn::set_all ()
 {
        for (uint32_t i = 0; i < TYPES; ++i)
        {
-               set (static_cast<type_t> (i), o);
+               mask[i] |= WARNING;
+       }
+}
+
+// -Werror doesn't set any warnings: it only guarantees that if a warning
+// has been set by now or will be set later then it will result into error.
+void Warn::set_all_error ()
+{
+       for (uint32_t i = 0; i < TYPES; ++i)
+       {
+               mask[i] |= ERROR;
        }
 }
 
index 44229bd4d587a1127e6a9b813b82f085776e29cb..7d819b1356ab1c9c19f41fdaf4b4ed34b62d0e45 100644 (file)
@@ -42,7 +42,8 @@ public:
        Warn ();
        bool error () const;
        void set (type_t t, option_t o);
-       void set_all (option_t o);
+       void set_all ();
+       void set_all_error ();
        void empty_class (uint32_t line);
        void match_empty_string (uint32_t line);
        void naked_default (uint32_t line, const std::vector<std::pair<uint32_t, uint32_t> > & stray_cunits, const std::string & cond);