X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=warning.c;h=68045372685103a5c186b9b61c23a885ffc7f573;hb=f56ee1a34627fb21c5909086f3597c76ce9583be;hp=623ab2c0c645ac1a11ea44f401917ca70fb79217;hpb=2acbcd833870d5baebd10be28ec9fad1f2175008;p=cparser diff --git a/warning.c b/warning.c index 623ab2c..6804537 100644 --- a/warning.c +++ b/warning.c @@ -1,6 +1,6 @@ /* * This file is part of cparser. - * Copyright (C) 2007-2008 Matthias Braun + * Copyright (C) 2007-2009 Matthias Braun * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -20,46 +20,123 @@ #include #include #include "warning.h" +#include "help.h" warning_t warning = { - .attribute = true, - .char_subscripts = true, - .declaration_after_statement = false, - .deprecated_declarations = true, - .div_by_zero = true, - .empty_statement = false, - .fatal_errors = false, - .float_equal = false, - .format = true, - .implicit_function_declaration = true, - .implicit_int = true, - .long_long = false, - .main = true, - .missing_declarations = false, - .missing_noreturn = false, - .missing_prototypes = false, - .multichar = true, - .nested_externs = false, - .nonnull = true, - .pointer_arith = true, - .redundant_decls = true, - .return_type = true, - .s_are_errors = false, - .shadow = false, - .sign_compare = false, - .strict_prototypes = true, - .switch_default = false, - .switch_enum = false, - .unknown_pragmas = true, - .unreachable_code = false, - .unused_function = false, - .unused_label = false, - .unused_parameter = false, - .unused_value = true, - .unused_variable = false, - .write_strings = false + .other = true, + + .address = true, + .aggregate_return = false, + .attribute = true, + .cast_qual = false, + .char_subscripts = true, + .comment = false, + .conversion = false, + .declaration_after_statement = false, + .deprecated_declarations = true, + .div_by_zero = true, + .empty_statement = false, + .error_implicit_function_declaration = false, + .fatal_errors = false, + .float_equal = false, + .format = true, + .implicit_function_declaration = true, + .implicit_int = true, + .init_self = true, + .long_long = false, + .main = true, + .missing_declarations = false, + .missing_noreturn = false, + .missing_prototypes = false, + .multichar = true, + .nested_externs = false, + .nonnull = true, + .old_style_definition = false, + .packed = false, + .padded = false, + .parentheses = false, + .pointer_arith = true, + .redundant_decls = 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, + .unused_label = false, + .unused_parameter = false, + .unused_value = true, + .unused_variable = 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; @@ -72,27 +149,37 @@ 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) OPTX("all") { - /* Note: this switched on a lot of more warnings than gcc's -Wall */ + /* Note: this switched on a lot more warnings than gcc's -Wall */ + SET(other); + + SET(address); SET(attribute); SET(char_subscripts); + SET(comment); SET(empty_statement); SET(format); SET(implicit_function_declaration); 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); @@ -101,24 +188,33 @@ void set_warning_opt(const char *const opt) SET(unused_value); SET(unused_variable); } - OPT("attribute", attribute); - OPT("char-subscripts", char_subscripts); - OPT("declaration-after-statement", declaration_after_statement); - OPT("deprecated-declarations", deprecated_declarations); - OPT("div_by_zero", div_by_zero); - OPT("empty-statement", empty_statement); - OPT("error", s_are_errors); + OPT("address", address); + OPT("aggregate-return", aggregate_return); + OPT("attribute", attribute); + OPT("cast-qual", cast_qual); + OPT("char-subscripts", char_subscripts); + OPT("comment", comment); + OPT("conversion", conversion); + OPT("declaration-after-statement", declaration_after_statement); + OPT("deprecated-declarations", deprecated_declarations); + OPT("div-by-zero", div_by_zero); + OPT("empty-statement", empty_statement); + 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("fatal-errors", fatal_errors); - OPT("float-equal", float_equal); + OPT("fatal-errors", fatal_errors); + OPT("float-equal", float_equal); OPTX("format") { SET(format); SET(nonnull); @@ -127,26 +223,34 @@ void set_warning_opt(const char *const opt) SET(implicit_function_declaration); SET(implicit_int); } - OPT("implicit-function-declaration", implicit_function_declaration); - OPT("implicit-int", implicit_int); - OPT("long-long", long_long); - OPT("main", main); - OPT("missing-declarations", missing_declarations); - OPT("missing-noreturn", missing_noreturn); - OPT("missing-prototypes", missing_prototypes); - OPT("multichar", multichar); - OPT("nested-externs", nested_externs); - OPT("nonnull", nonnull); - OPT("pointer_arith", pointer_arith); - OPT("redundant-decls", redundant_decls); - OPT("return-type", return_type); - OPT("shadow", shadow); - OPT("sign-compare", sign_compare); - OPT("strict-prototypes", strict_prototypes); - OPT("switch-default", switch_default); - OPT("switch-enum", switch_enum); - OPT("unknown-pragmas", unknown_pragmas); - OPT("unreachable-code", unreachable_code); + OPT("implicit-function-declaration", implicit_function_declaration); + OPT("implicit-int", implicit_int); + OPT("init-self", init_self); + OPT("long-long", long_long); + OPT("main", main); + OPT("missing-declarations", missing_declarations); + OPT("missing-noreturn", missing_noreturn); + OPT("missing-prototypes", missing_prototypes); + OPT("multichar", multichar); + OPT("nested-externs", nested_externs); + OPT("nonnull", nonnull); + OPT("old-style-definition", old_style_definition); + OPT("packed", packed); + OPT("padded", padded); + OPT("parentheses", parentheses); + OPT("pointer-arith", pointer_arith); + 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") { SET(unused_function); SET(unused_label); @@ -154,12 +258,12 @@ void set_warning_opt(const char *const opt) SET(unused_value); SET(unused_variable); } - OPT("unused-function", unused_function); - OPT("unused-label", unused_label); - OPT("unused-parameter", unused_parameter); - OPT("unused-value", unused_value); - OPT("unused-variable", unused_variable); - OPT("write-strings", write_strings); + OPT("unused-function", unused_function); + OPT("unused-label", unused_label); + OPT("unused-parameter", unused_parameter); + OPT("unused-value", unused_value); + OPT("unused-variable", unused_variable); + OPT("write-strings", write_strings); #undef OPT #undef SET #undef OPT_X