X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=warning.c;h=f29bcd0f227d82bebde08e335392b7b8641e67f0;hb=1e5beaa8d9745ba44cb9f85671000014cfbed6bc;hp=26890078bc09038e2e6c81b24fd754b63fb6150c;hpb=cb1ef31fc377e6849c07ce78a176c6c84a41ab04;p=cparser diff --git a/warning.c b/warning.c index 2689007..f29bcd0 100644 --- a/warning.c +++ b/warning.c @@ -1,13 +1,63 @@ +/* + * This file is part of cparser. + * Copyright (C) 2007-2008 Matthias Braun + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + */ #include #include #include "warning.h" +warning_t warning = { + .attribute = true, + .char_subscripts = true, + .format = true, + .nonnull = true, + .empty_statement = false, + .fatal_errors = false, + .float_equal = false, + .implicit_function_declaration = true, + .implicit_int = true, + .main = true, + .missing_declarations = false, + .missing_prototypes = false, + .multichar = true, + .redundant_decls = true, + .return_type = true, + .s_are_errors = false, + .shadow = false, + .sign_compare = false, + .strict_prototypes = true, + .switch_default = false, + .unknown_pragmas = true, + .unreachable_code = false, + .unused_function = false, + .unused_label = false, + .unused_parameter = false, + .unused_value = true, + .unused_variable = false +}; + void set_warning_opt(const char *const opt) { const char* s = opt; bool state = true; - /* no- modifier */ + + /* "no-" prefix */ if (s[0] == 'n' && s[1] == 'o' && s[2] == '-') { s += 3; state = false; @@ -15,34 +65,81 @@ void set_warning_opt(const char *const opt) if (0) {} #define OPTX(x) else if (strcmp(s, x) == 0) -#define SET(y) warning.y = state; +#define SET(y) (void)(warning.y = state) #define OPT(x, y) OPTX(x) SET(y) - OPT("char-subscripts", char_subscripts) - OPT("error", s_are_errors) - OPT("fatal-errors", fatal_errors) - OPT("format", check_format) + OPTX("all") { + /* Note: this switched on a lot of more warnings than gcc's -Wall */ + SET(attribute); + SET(char_subscripts); + SET(empty_statement); + SET(format); + SET(implicit_function_declaration); + SET(implicit_int); + SET(main); + SET(nonnull); + SET(redundant_decls); + SET(return_type); + SET(shadow); + SET(sign_compare); + SET(strict_prototypes); + SET(unknown_pragmas); + SET(unreachable_code); + SET(unused_function); + SET(unused_label); + SET(unused_parameter); + SET(unused_value); + SET(unused_variable); + } + OPT("attribute", attribute); + OPT("char-subscripts", char_subscripts); + OPT("empty-statement", empty_statement); + OPT("error", s_are_errors); + OPTX("extra") { + /* TODO */ + // TODO SET(function_end_without_return); + SET(empty_statement); + // TODO SET(incomplete_aggregate_init); + // TODO SET(pointless_comparison); + SET(unused_parameter); + SET(unused_value); + } + OPT("fatal-errors", fatal_errors); + OPT("float-equal", float_equal); + OPTX("format") { + SET(format); + SET(nonnull); + } + OPT("nonnull", nonnull); OPTX("implicit") { - SET(implicit_function_declaration) - SET(implicit_int) + SET(implicit_function_declaration); + SET(implicit_int); } - OPT("implicit-function-declaration", implicit_function_declaration) - OPT("implicit-int", implicit_int) - OPT("missing-declarations", missing_declarations) - OPT("missing-prototypes", missing_prototypes) - OPT("redundant-decls", redundant_decls) - OPT("strict-prototypes", strict_prototypes) - OPT("switch-default", switch_default) - OPT("unknown-pragmas", unknown_pragmas) -#if 0 + OPT("implicit-function-declaration", implicit_function_declaration); + OPT("implicit-int", implicit_int); + OPT("main", main); + OPT("missing-declarations", missing_declarations); + OPT("missing-prototypes", missing_prototypes); + OPT("multichar", multichar); + 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("unknown-pragmas", unknown_pragmas); + OPT("unreachable-code", unreachable_code); OPTX("unused") { - SET(unused_function) - SET(unused_label) - SET(unused_parameter) - SET(unused_variable) - SET(unused_value) + SET(unused_function); + SET(unused_label); + SET(unused_parameter); + SET(unused_value); + SET(unused_variable); } -#endif - OPT("unused-value", unused_value) + 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); #undef OPT #undef SET #undef OPT_X @@ -50,19 +147,3 @@ void set_warning_opt(const char *const opt) fprintf(stderr, "warning: ignoring unknown option -W%s\n", opt); } } - -warning_t warning = { - .char_subscripts = true, - .check_format = true, - .fatal_errors = false, - .implicit_function_declaration = true, - .implicit_int = true, - .missing_declarations = true, - .missing_prototypes = true, - .redundant_decls = true, - .s_are_errors = false, - .strict_prototypes = true, - .switch_default = false, - .unknown_pragmas = true, - .unused_value = true -};