From 7ba01e111c878291d8677db124eb4d7aef7c9541 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 19 Apr 2013 17:13:07 +0200 Subject: [PATCH] tests: enable -Wsign-compare and fix corresponding warnings -Wsign-compare was disabled for bison's own code, following gnulib's approach. However, the generated parsers should not trigger such warnings. Reported by Efi Fogel. http://lists.gnu.org/archive/html/help-bison/2013-04/msg00018.html See also http://stackoverflow.com/questions/16101062 for the weird "-(unsigned)i" piece of code. * configure.ac (warn_tests): Enable -Wsign-compare. * data/location.cc (position::add_): New. (position::lines, position::columns): Use it. * tests/actions.at (AT_CHECK_PRINTER_AND_DESTRUCTOR): Fix signedness issues. --- THANKS | 1 + configure.ac | 2 +- data/location.cc | 19 +++++++++++-------- tests/actions.at | 10 +++++----- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/THANKS b/THANKS index 320e26f1..e2cf97a6 100644 --- a/THANKS +++ b/THANKS @@ -38,6 +38,7 @@ Derek M. Jones derek@knosof.co.uk Di-an Jan dianj@freeshell.org Dick Streefland dick.streefland@altium.nl Didier Godefroy dg@ulysium.net +Efi Fogel efifogel@gmail.com Enrico Scholz enrico.scholz@informatik.tu-chemnitz.de Eric Blake ebb9@byu.net Evgeny Stambulchik fnevgeny@plasma-gate.weizmann.ac.il diff --git a/configure.ac b/configure.ac index e6ef8baf..df5670cd 100644 --- a/configure.ac +++ b/configure.ac @@ -91,7 +91,7 @@ if test "$enable_gcc_warnings" = yes; then # -fno-color-diagnostics: Clang's use of colors in the error # messages is confusing the tests looking at the compiler's output # (e.g., synclines.at). - warn_tests='-Wundef -pedantic -fno-color-diagnostics' + warn_tests='-Wundef -pedantic -Wsign-compare -fno-color-diagnostics' AC_LANG_PUSH([C]) # Clang supports many of GCC's -W options, but only issues warnings diff --git a/data/location.cc b/data/location.cc index 309b9c0f..9a60f250 100644 --- a/data/location.cc +++ b/data/location.cc @@ -55,20 +55,14 @@ m4_define([b4_position_define], if (count) { column = ]b4_location_initial_column[u; - line = - 0 < count || -count < line - ? line + count - : ]b4_location_initial_line[; + line = add_ (line, count, ]b4_location_initial_line[); } } /// (column related) Advance to the COUNT next columns. void columns (int count = 1) { - column = - 0 < count || -count < column - ? column + count - : ]b4_location_initial_column[; + column = add_ (column, count, ]b4_location_initial_column[); } /** \} */ @@ -78,6 +72,15 @@ m4_define([b4_position_define], unsigned int line; /// Current column number. unsigned int column; + + private: + /// Compute max(min, lhs+rhs) (provided min <= lhs). + static unsigned int add_ (unsigned int lhs, int rhs, unsigned int min) + { + return (0 < rhs || -static_cast(rhs) < lhs + ? rhs + lhs + : min); + } }; /// Add and assign a position. diff --git a/tests/actions.at b/tests/actions.at index 88aad258..6c1ecbc1 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -605,11 +605,11 @@ static { static unsigned int counter = 0; - int c = ]AT_VAL[]m4_ifval([$6], [.ival])[ = counter++; + unsigned int c = ]AT_VAL[]m4_ifval([$6], [.ival])[ = counter++; /* As in BASIC, line numbers go from 10 to 10. */ ]AT_LOC_FIRST_LINE[ = ]AT_LOC_FIRST_COLUMN[ = 10 * c; ]AT_LOC_LAST_LINE[ = ]AT_LOC_LAST_COLUMN[ = ]AT_LOC_FIRST_LINE[ + 9; - assert (0 <= c && c <= strlen (source)); + assert (c <= strlen (source)); if (source[c]) fprintf (stderr, "sending: '%c'", source[c]); else @@ -848,13 +848,13 @@ AT_CLEANUP AT_CHECK_PRINTER_AND_DESTRUCTOR([]) -AT_CHECK_PRINTER_AND_DESTRUCTOR([], [with union]) +AT_CHECK_PRINTER_AND_DESTRUCTOR([], [ with union]) AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"]) -AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [with union]) +AT_CHECK_PRINTER_AND_DESTRUCTOR([%defines %skeleton "lalr1.cc"], [ with union]) AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser]) -AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union]) +AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [ with union]) -- 2.45.2