sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Don't access PTR beyond its end.
authorKazu Hirata <kazu@cs.umass.edu>
Fri, 22 Oct 2004 19:48:43 +0000 (19:48 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Fri, 22 Oct 2004 19:48:43 +0000 (19:48 +0000)
* sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Don't access PTR
beyond its end.

From-SVN: r89475

gcc/ChangeLog
gcc/sbitmap.h

index 1e782274b87a7eb19d12ef15c88001a626e3904c..5fd6a3d1c4c1c31118bab20678ce2716e6296271 100644 (file)
@@ -1,3 +1,8 @@
+2004-10-22  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * sbitmap.h (EXECUTE_IF_SET_IN_SBITMAP): Don't access PTR
+       beyond its end.
+
 2004-10-22  Eric Christopher  <echristo@redhat.com>
 
         * config/rs6000/rs6000.c (setup_incoming_varargs): Align DFmode
index e75e3b66df3069cf5d10a8517a1b092119463423..779a99611293d22625ef121e7c388640da10bf89 100644 (file)
@@ -62,19 +62,26 @@ do {                                                                        \
   unsigned int bit_num_ = (MIN) % (unsigned int) SBITMAP_ELT_BITS;     \
   unsigned int size_ = (SBITMAP)->size;                                        \
   SBITMAP_ELT_TYPE *ptr_ = (SBITMAP)->elms;                            \
-  SBITMAP_ELT_TYPE word_ = ptr_[word_num_] >> bit_num_;                        \
+  SBITMAP_ELT_TYPE word_;                                              \
                                                                        \
-  for (;                                                               \
-       word_num_ < size_;                                              \
-       word_num_++, bit_num_ = 0, word_ = ptr_[word_num_])             \
+  if (word_num_ < size_)                                               \
     {                                                                  \
-      for (; word_ != 0; word_ >>= 1, bit_num_++)                      \
+      word_ = ptr_[word_num_] >> bit_num_;                             \
+                                                                       \
+      while (1)                                                                \
        {                                                               \
-         if ((word_ & 1) != 0)                                         \
+         for (; word_ != 0; word_ >>= 1, bit_num_++)                   \
            {                                                           \
-             (N) = word_num_ * SBITMAP_ELT_BITS + bit_num_;            \
-             CODE;                                                     \
+             if ((word_ & 1) != 0)                                     \
+               {                                                       \
+                 (N) = word_num_ * SBITMAP_ELT_BITS + bit_num_;        \
+                 CODE;                                                 \
+               }                                                       \
            }                                                           \
+         word_num_++;                                                  \
+         if (word_num_ >= size_)                                       \
+           break;                                                      \
+         bit_num_ = 0, word_ = ptr_[word_num_];                        \
        }                                                               \
     }                                                                  \
 } while (0)