* dispnew.c (init_display): Use *_RANGE_OVERFLOW macros.
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 11 Jul 2011 18:36:33 +0000 (11:36 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 11 Jul 2011 18:36:33 +0000 (11:36 -0700)
The plain *_OVERFLOW macros run afoul of GCC bug 49705
<http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49705>
and therefore cause GCC to emit a bogus diagnostic in some cases.

src/ChangeLog
src/dispnew.c

index 4e69399..c519100 100644 (file)
@@ -1,5 +1,10 @@
 2011-07-11  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * dispnew.c (init_display): Use *_RANGE_OVERFLOW macros.
+       The plain *_OVERFLOW macros run afoul of GCC bug 49705
+       <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49705>
+       and therefore cause GCC to emit a bogus diagnostic in some cases.
+
        * image.c: Integer signedness and overflow and related fixes.
        This is not an exhaustive set of fixes, but it's time to
        record what I've got.
index 15d8036..d52bbdf 100644 (file)
@@ -6298,8 +6298,8 @@ init_display (void)
        change.  It's not clear what better we could do.  The rest of
        the code assumes that (width + 2) * height * sizeof (struct glyph)
        does not overflow and does not exceed PTRDIFF_MAX or SIZE_MAX.  */
-    if (INT_ADD_OVERFLOW (width, 2)
-       || INT_MULTIPLY_OVERFLOW (width + 2, height)
+    if (INT_ADD_RANGE_OVERFLOW (width, 2, INT_MIN, INT_MAX)
+       || INT_MULTIPLY_RANGE_OVERFLOW (width + 2, height, INT_MIN, INT_MAX)
        || (min (PTRDIFF_MAX, SIZE_MAX) / sizeof (struct glyph)
            < (width + 2) * height))
       fatal ("screen size %dx%d too big", width, height);