]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
maint: avoid signed overflow warning with -O3
authorPádraig Brady <P@draigBrady.com>
Mon, 1 Dec 2014 23:04:36 +0000 (23:04 +0000)
committerPádraig Brady <P@draigBrady.com>
Tue, 2 Dec 2014 01:20:39 +0000 (01:20 +0000)
Prompted by the implicit -O3 added by american-fuzzy-lop,
seen with GCC 4.9.2 on x86_64.

  src/pr.c: In function 'print_files.part.5':
  src/pr.c:1781:6: error: assuming signed overflow does not occur
  when simplifying conditional to constant [-Werror=strict-overflow]
     if (cols_ready_to_print () == 0)

This happens because cols_ready_to_print() is inlined
thus reducing the comparison to the N variable in print_page().
Now this can't overflow due to the protection when parsing the
specified column, but use an unsigned type to avoid the
apparent signed overflow.

* src/pr.c (cols_ready_to_print): Increment an unsigned type to
avoid the subsequent signed overflow warning.

src/pr.c

index 39be8be8ade71ee4c823e52e6df912c0a6851a1d..529964985025a7976504859e133b15b107d4a202 100644 (file)
--- a/src/pr.c
+++ b/src/pr.c
@@ -768,12 +768,12 @@ static struct option const long_options[] =
 /* Return the number of columns that have either an open file or
    stored lines. */
 
-static int _GL_ATTRIBUTE_PURE
+static unsigned int _GL_ATTRIBUTE_PURE
 cols_ready_to_print (void)
 {
   COLUMN *q;
-  int i;
-  int n;
+  unsigned int i;
+  unsigned int n;
 
   n = 0;
   for (q = column_vector, i = 0; i < columns; ++q, ++i)
@@ -1815,7 +1815,7 @@ print_page (void)
               --p->lines_to_print;
               if (p->lines_to_print <= 0)
                 {
-                  if (cols_ready_to_print () <= 0)
+                  if (cols_ready_to_print () == 0)
                     break;
                 }
 
@@ -1849,7 +1849,7 @@ print_page (void)
           --lines_left_on_page;
         }
 
-      if (cols_ready_to_print () <= 0 && !extremities)
+      if (cols_ready_to_print () == 0 && !extremities)
         break;
 
       if (double_space && pv)