#include <stdio.h>
#include <string.h>
#include "warning.h"
+#include "help.h"
warning_t warning = {
.other = true,
.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,
.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;
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)
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);
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);
}
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") {