Le 18 avr. 2013 à 10:30, Efi Fogel <efifo...@gmail.com> a écrit : > Hi, > > I've pulled the latest version. > I get the following warning (which I treat as an error): > > position.hh:100:31: error: comparison between signed and unsigned integer > expressions [-Werror=sign-compare] > > The relevant code of position.hh follows: > 96 /// (column related) Advance to the COUNT next columns. > 97 void columns (int count = 1) > 98 { > 99 column = > 100 0 < count || -count < column > 101 ? column + count > 102 : 1; > 103 }
hi Efi, Thanks for the report. I'll apply this, unless someone has a better idea. commit 7ba01e111c878291d8677db124eb4d7aef7c9541 Author: Akim Demaille <a...@lrde.epita.fr> Date: Fri Apr 19 17:13:07 2013 +0200 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. diff --git a/THANKS b/THANKS index 320e26f..e2cf97a 100644 --- a/THANKS +++ b/THANKS @@ -38,6 +38,7 @@ Derek M. Jones de...@knosof.co.uk Di-an Jan di...@freeshell.org Dick Streefland dick.streefl...@altium.nl Didier Godefroy d...@ulysium.net +Efi Fogel efifo...@gmail.com Enrico Scholz enrico.sch...@informatik.tu-chemnitz.de Eric Blake e...@byu.net Evgeny Stambulchik fnevg...@plasma-gate.weizmann.ac.il diff --git a/configure.ac b/configure.ac index e6ef8ba..df5670c 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 309b9c0..9a60f25 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<unsigned int>(rhs) < lhs + ? rhs + lhs + : min); + } }; /// Add and assign a position. diff --git a/tests/actions.at b/tests/actions.at index 88aad25..6c1ecbc 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]) _______________________________________________ help-bison@gnu.org https://lists.gnu.org/mailman/listinfo/help-bison