* alloc.c (mark_object_loop_halt, mark_object): Use size_t, not int.
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 3 Apr 2011 05:41:46 +0000 (22:41 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sun, 3 Apr 2011 05:41:46 +0000 (22:41 -0700)
Otherwise, GCC 4.6.0 optimizes the loop check away since the check
can always succeed if overflow has undefined behavior.

src/ChangeLog
src/alloc.c

index 2c8a95c..6273123 100644 (file)
@@ -1,5 +1,9 @@
 2011-04-03  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * alloc.c (mark_object_loop_halt, mark_object): Use size_t, not int.
+       Otherwise, GCC 4.6.0 optimizes the loop check away since the check
+       can always succeed if overflow has undefined behavior.
+
        * search.c (boyer_moore, wordify): Remove vars set but not used.
        (wordify): Omit three unnecessary tests.
 
index 07f1caa..54c4760 100644 (file)
@@ -5221,7 +5221,7 @@ int last_marked_index;
    links of a list, in mark_object.  In debugging,
    the call to abort will hit a breakpoint.
    Normally this is zero and the check never goes off.  */
-static int mark_object_loop_halt;
+static size_t mark_object_loop_halt;
 
 static void
 mark_vectorlike (struct Lisp_Vector *ptr)
@@ -5278,7 +5278,7 @@ mark_object (Lisp_Object arg)
   void *po;
   struct mem_node *m;
 #endif
-  int cdr_count = 0;
+  size_t cdr_count = 0;
 
  loop: