From a2c525b34c24e790e37d8735c28c708c17cf9f57 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 22 Jan 2015 19:03:41 +0100 Subject: build: re-enable compiler warnings, and fix them There are warnings (-Wextra) in generated C++ code: ltlparse.cc: In member function 'ltlyy::parser::symbol_number_type ltlyy::parser::by_state::type_get() const': ltlparse.cc:452:33: warning: enumeral and non-enumeral type in conditional expression return state == empty_state ? empty_symbol : yystos_[state]; Reported by Alexandre Duret-Lutz. It turns out that -Wall and -Wextra were disabled because of a stupid typo. * configure.ac: Fix the stupid typo. * data/lalr1.cc, src/AnnotationList.c, src/InadequacyList.c, * src/ielr.c, src/print.c, src/scan-code.l, src/symlist.c, * src/symlist.h, src/symtab.c, src/tables.c, tests/actions.at, * tests/calc.at, tests/cxx-type.at, tests/glr-regression.at, * tests/named-refs.at, tests/torture.at: Fix warnings, mostly issues about variables used only with assertions, which are disabled with -DNDEBUG. --- configure.ac | 2 +- data/lalr1.cc | 14 +++++++++++--- src/AnnotationList.c | 2 +- src/InadequacyList.c | 2 +- src/ielr.c | 5 ++++- src/print.c | 1 + src/scan-code.l | 5 ++--- src/symlist.c | 2 +- src/symlist.h | 2 +- src/symtab.c | 2 +- src/tables.c | 2 +- tests/actions.at | 2 +- tests/calc.at | 4 ++-- tests/cxx-type.at | 2 +- tests/glr-regression.at | 2 +- tests/named-refs.at | 4 ++-- tests/torture.at | 2 +- 17 files changed, 33 insertions(+), 22 deletions(-) diff --git a/configure.ac b/configure.ac index 559b5054..6f200400 100644 --- a/configure.ac +++ b/configure.ac @@ -81,7 +81,7 @@ AC_ARG_ENABLE([gcc-warnings], [enable_gcc_warnings=no]) AM_CONDITIONAL([ENABLE_GCC_WARNINGS], [test "$enable_gcc_warnings" = yes]) if test "$enable_gcc_warnings" = yes; then - warn_common='-Wall-Wextra -Wno-sign-compare -Wcast-align -Wdocumentation + warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align -Wdocumentation -Wformat -Wpointer-arith -Wwrite-strings' warn_c='-Wbad-function-cast -Wshadow -Wstrict-prototypes' warn_cxx='-Wnoexcept' diff --git a/data/lalr1.cc b/data/lalr1.cc index 0e0e17ae..3773257c 100644 --- a/data/lalr1.cc +++ b/data/lalr1.cc @@ -149,10 +149,11 @@ b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])]) m4_define([b4_shared_declarations], [b4_percent_code_get([[requires]])[ ]b4_parse_assert_if([# include ])[ -# include +# include // std::abort # include # include -# include ]b4_defines_if([[ +# include +# include ]b4_defines_if([[ # include "stack.hh" ]b4_bison_locations_if([[# include "location.hh"]])])[ ]b4_variant_if([b4_variant_includes])[ @@ -569,7 +570,10 @@ m4_if(b4_prefix, [yy], [], ]b4_parser_class_name[::symbol_number_type ]b4_parser_class_name[::by_state::type_get () const { - return state == empty_state ? empty_symbol : yystos_[state]; + if (state == empty_state) + return empty_symbol; + else + return yystos_[state]; } inline @@ -622,6 +626,10 @@ m4_if(b4_prefix, [yy], [], std::ostream& yyoutput = yyo; YYUSE (yyoutput); symbol_number_type yytype = yysym.type_get (); + // Avoid a (spurious) G++ 4.8 warning about "array subscript is + // below array bounds". + if (yysym.empty ()) + std::abort (); yyo << (yytype < yyntokens_ ? "token" : "nterm") << ' ' << yytname_[yytype] << " ("]b4_locations_if([ << yysym.location << ": "])[; diff --git a/src/AnnotationList.c b/src/AnnotationList.c index 8d0c7fed..586ed9b5 100644 --- a/src/AnnotationList.c +++ b/src/AnnotationList.c @@ -546,7 +546,7 @@ AnnotationList__compute_from_inadequacies ( AnnotationList__insertInto (annotation_node, &annotation_lists[s->number], s->nitems); - aver (b); + aver (b); (void) b; } /* This aver makes sure the AnnotationList__computeDominantContribution check above diff --git a/src/InadequacyList.c b/src/InadequacyList.c index e827cb0a..f2e45f49 100644 --- a/src/InadequacyList.c +++ b/src/InadequacyList.c @@ -66,7 +66,7 @@ symbol * InadequacyList__getContributionToken (InadequacyList const *self, ContributionIndex i) { - aver (0 <= i && i < self->contributionCount); + aver (0 <= i && i < self->contributionCount); (void) i; return self->inadequacy.conflict.token; } diff --git a/src/ielr.c b/src/ielr.c index d34651b0..8b28e67b 100644 --- a/src/ielr.c +++ b/src/ielr.c @@ -1102,7 +1102,10 @@ ielr (void) else if (STREQ (type, "canonical-lr")) lr_type = LR_TYPE__CANONICAL_LR; else - aver (false); + { + aver (false); + abort (); + } free (type); } diff --git a/src/print.c b/src/print.c index 2540a4bd..6efcc891 100644 --- a/src/print.c +++ b/src/print.c @@ -343,6 +343,7 @@ print_reductions (FILE *out, state *s) || (STREQ (default_reductions, "consistent") && default_reduction_only) || (reds->num == 1 && reds->rules[0]->number == 0)); + (void) default_reduction_only; free (default_reductions); } } diff --git a/src/scan-code.l b/src/scan-code.l index 308d1d0d..eeca1616 100644 --- a/src/scan-code.l +++ b/src/scan-code.l @@ -664,7 +664,7 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc) case LHS_REF: if (!type_name) - type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0); + type_name = symbol_list_n_type_name_get (rule, 0); if (!type_name) { @@ -695,8 +695,7 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc) if (max_left_semantic_context < 1 - n) max_left_semantic_context = 1 - n; if (!type_name && 0 < n) - type_name = - symbol_list_n_type_name_get (effective_rule, dollar_loc, n); + type_name = symbol_list_n_type_name_get (effective_rule, n); if (!type_name) { if (union_seen | tag_seen) diff --git a/src/symlist.c b/src/symlist.c index d8514636..109c27c9 100644 --- a/src/symlist.c +++ b/src/symlist.c @@ -190,7 +190,7 @@ symbol_list_n_get (symbol_list *l, int n) `--------------------------------------------------------------*/ uniqstr -symbol_list_n_type_name_get (symbol_list *l, location loc, int n) +symbol_list_n_type_name_get (symbol_list *l, int n) { return symbol_list_n_get (l, n)->content.sym->type_name; } diff --git a/src/symlist.h b/src/symlist.h index aeb46229..45cb7963 100644 --- a/src/symlist.h +++ b/src/symlist.h @@ -124,7 +124,7 @@ symbol_list *symbol_list_n_get (symbol_list *l, int n); /* Get the data type (alternative in the union) of the value for symbol N in rule RULE. */ -uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n); +uniqstr symbol_list_n_type_name_get (symbol_list *l, int n); /* Check whether the node is a border element of a rule. */ bool symbol_list_null (symbol_list *node); diff --git a/src/symtab.c b/src/symtab.c index 0a28b699..fb025da7 100644 --- a/src/symtab.c +++ b/src/symtab.c @@ -145,7 +145,7 @@ code_props_type_string (code_props_type kind) case printer: return "%printer"; } - assert (0); + abort (); } /*----------------------------------------. diff --git a/src/tables.c b/src/tables.c index d6e2dbe4..9497b310 100644 --- a/src/tables.c +++ b/src/tables.c @@ -698,7 +698,7 @@ pack_vector (vector_number vector) if (ok) { - int loc; + int loc PACIFY_CC (= -1); int k; for (k = 0; k < t; k++) { diff --git a/tests/actions.at b/tests/actions.at index 2671ca54..d538f883 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -633,7 +633,7 @@ main (int argc, const char *argv[]) { int status; yydebug = !!getenv ("YYDEBUG"); - assert (argc == 2); + assert (argc == 2); (void) argc; source = argv[1]; status = yyparse (); switch (status) diff --git a/tests/calc.at b/tests/calc.at index 9696c4ee..85170097 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -94,8 +94,8 @@ main (int argc, const char **argv) status = ]AT_NAME_PREFIX[parse (]AT_PARAM_IF([[&result, &count]])[); if (fclose (input)) perror ("fclose"); - assert (global_result == result); - assert (global_count == count); + assert (global_result == result); (void) result; + assert (global_count == count); (void) count; return status; } ]]) diff --git a/tests/cxx-type.at b/tests/cxx-type.at index eb11156f..e112a2cf 100644 --- a/tests/cxx-type.at +++ b/tests/cxx-type.at @@ -127,7 +127,7 @@ declarator : ID int main (int argc, char **argv) { - assert (argc == 2); + assert (argc == 2); (void) argc; if (!freopen (argv[1], "r", stdin)) return 3; return yyparse (); diff --git a/tests/glr-regression.at b/tests/glr-regression.at index 71f6e6d5..a815008d 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -72,7 +72,7 @@ const char *input = YY_NULLPTR; int main (int argc, const char* argv[]) { - assert (argc == 2); + assert (argc == 2); (void) argc; input = argv[1]; return yyparse (); } diff --git a/tests/named-refs.at b/tests/named-refs.at index f8df417d..17516a6a 100644 --- a/tests/named-refs.at +++ b/tests/named-refs.at @@ -162,8 +162,8 @@ int main (int argc, const char **argv) } status = yyparse (); fclose (input); - assert (global_result == result); - assert (global_count == count); + assert (global_result == result); (void) global_result; (void) result; + assert (global_count == count); (void) global_count; (void) count; return status; } ]]) diff --git a/tests/torture.at b/tests/torture.at index ad9bf9b2..d6b2806a 100644 --- a/tests/torture.at +++ b/tests/torture.at @@ -403,7 +403,7 @@ get_args (int argc, const char **argv) { int res; char *endp; - assert (argc == 2); + assert (argc == 2); (void) argc; res = strtol (argv[1], &endp, 10); assert (argv[1] != endp); assert (0 <= res); -- cgit v1.2.1