summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkim Demaille <akim@lrde.epita.fr>2013-04-19 17:13:07 +0200
committerAkim Demaille <akim@lrde.epita.fr>2013-04-19 17:13:07 +0200
commit7ba01e111c878291d8677db124eb4d7aef7c9541 (patch)
treec8d8468add55e6182b0dda3beb7594beab7dd943
parent6ce4b4ff1b761a0408cf94abb308fac9b55edd3d (diff)
downloadbison-7ba01e111c878291d8677db124eb4d7aef7c9541.tar.gz
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.
-rw-r--r--THANKS1
-rw-r--r--configure.ac2
-rw-r--r--data/location.cc19
-rw-r--r--tests/actions.at10
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<unsigned int>(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])