fix a bunch of warnings (reported by cparser)
[cparser] / warning.c
index f2fd2b9..6804537 100644 (file)
--- a/warning.c
+++ b/warning.c
@@ -20,6 +20,7 @@
 #include <stdio.h>
 #include <string.h>
 #include "warning.h"
+#include "help.h"
 
 warning_t warning = {
        .other                               = true,
@@ -59,11 +60,13 @@ warning_t warning = {
        .return_type                         = true,
        .s_are_errors                        = false,
        .shadow                              = false,
+       .shadow_local                        = false,
        .sign_compare                        = false,
        .strict_prototypes                   = true,
        .switch_default                      = false,
        .switch_enum                         = false,
        .traditional                         = false,
+       .uninitialized                       = true,
        .unknown_pragmas                     = true,
        .unreachable_code                    = false,
        .unused_function                     = false,
@@ -74,6 +77,66 @@ warning_t warning = {
        .write_strings                       = false
 };
 
+void print_warning_opt_help(void)
+{
+       /* TODO: write explanations */
+       put_help("-Waddress",                       "");
+       put_help("-Wall",                           "");
+       put_help("-Waggregate-return",              "");
+       put_help("-Wattribute",                     "");
+       put_help("-Wcast-qual",                     "");
+       put_help("-Wchar-subscripts",               "");
+       put_help("-Wcomment",                       "");
+       put_help("-Wconversion",                    "");
+       put_help("-Wdeclaration-after-statement",   "");
+       put_help("-Wdeprecated-declarations",       "");
+       put_help("-Wdiv-by-zero",                   "");
+       put_help("-Wempty-statement",               "");
+       put_help("-Werror",                         "warnings are errors");
+       put_help("-Werror-implicit-function-declaration", "");
+       put_help("-Wextra",                         "");
+       put_help("-Wfatal-errors",                  "");
+       put_help("-Wfloat-equal",                   "");
+       put_help("-Wformat",                        "");
+       put_help("-Wimplicit",                      "");
+       put_help("-Wimplicit-function-declaration", "");
+       put_help("-Wimplicit-int",                  "");
+       put_help("-Winit-self",                     "");
+       put_help("-Wlong-long",                     "");
+       put_help("-Wmain",                          "");
+       put_help("-Wmissing-declarations",          "");
+       put_help("-Wmissing-noreturn",              "");
+       put_help("-Wmissing-prototypes",            "");
+       put_help("-Wmultichar",                     "");
+       put_help("-Wnested-externs",                "");
+       put_help("-Wnonnull",                       "");
+       put_help("-Wold-style-definition",          "");
+       put_help("-Wparentheses",                   "");
+       put_help("-Wpacked",                        "");
+       put_help("-Wpadded",                        "");
+       put_help("-Wparentheses",                   "");
+       put_help("-Wpointer-arith",                 "");
+       put_help("-Wredundant-decls",               "");
+       put_help("-Wreturn-type",                   "");
+       put_help("-Wshadow",                        "");
+       put_help("-Wshadow-local",                  "");
+       put_help("-Wsign-compare",                  "");
+       put_help("-Wstrict-prototypes",             "");
+       put_help("-Wswitch-default",                "");
+       put_help("-Wswitch-enum",                   "");
+       put_help("-Wtraditional",                   "");
+       put_help("-Wuninitialized",                 "");
+       put_help("-Wunknown-pragmas",               "");
+       put_help("-Wunreachable-code",              "");
+       put_help("-Wunused",                        "");
+       put_help("-Wunused-function",               "");
+       put_help("-Wunused-label",                  "");
+       put_help("-Wunused-parameter",              "");
+       put_help("-Wunused-value",                  "");
+       put_help("-Wunused-variable",               "");
+       put_help("-Wwrite-strings",                 "");
+}
+
 void set_warning_opt(const char *const opt)
 {
        const char* s = opt;
@@ -86,7 +149,9 @@ void set_warning_opt(const char *const opt)
                state = false;
        }
 
-       if (0) {}
+       if (s[0] == '\0') { // -W is an alias for -Wextra
+               goto extra;
+       }
 #define OPTX(x)   else if (strcmp(s, x) == 0)
 #define SET(y)    (void)(warning.y = state)
 #define OPT(x, y) OPTX(x) SET(y)
@@ -104,15 +169,17 @@ void set_warning_opt(const char *const opt)
                SET(implicit_int);
                SET(init_self);
                SET(main);
+               SET(missing_declarations);
                SET(nonnull);
                SET(parentheses);
                SET(pointer_arith);
                SET(redundant_decls);
                SET(return_type);
-               SET(shadow);
+               SET(shadow_local);
                SET(sign_compare);
                SET(strict_prototypes);
                SET(switch_enum);
+               SET(uninitialized);
                SET(unknown_pragmas);
                SET(unreachable_code);
                SET(unused_function);
@@ -135,12 +202,14 @@ void set_warning_opt(const char *const opt)
        OPT("error",                               s_are_errors);
        OPT("error-implicit-function-declaration", error_implicit_function_declaration);
        OPTX("extra") {
+extra:
                /* TODO */
                // TODO SET(function_end_without_return);
                SET(empty_statement);
                // TODO SET(incomplete_aggregate_init);
                // TODO SET(missing_field_initializers);
                // TODO SET(pointless_comparison);
+               SET(shadow);
                SET(unused_parameter);
                SET(unused_value);
        }
@@ -173,11 +242,13 @@ void set_warning_opt(const char *const opt)
        OPT("redundant-decls",                     redundant_decls);
        OPT("return-type",                         return_type);
        OPT("shadow",                              shadow);
+       OPT("shadow-local",                        shadow_local);
        OPT("sign-compare",                        sign_compare);
        OPT("strict-prototypes",                   strict_prototypes);
        OPT("switch-default",                      switch_default);
        OPT("switch-enum",                         switch_enum);
        OPT("traditional",                         traditional);
+       OPT("uninitialized",                       uninitialized);
        OPT("unknown-pragmas",                     unknown_pragmas);
        OPT("unreachable-code",                    unreachable_code);
        OPTX("unused") {