stl_algobase.h (__equal<true>::equal): Check length instead of checking for null...
authorJonathan Wakely <jwakely@redhat.com>
Sat, 30 May 2015 11:44:02 +0000 (12:44 +0100)
committerJonathan Wakely <redi@gcc.gnu.org>
Sat, 30 May 2015 11:44:02 +0000 (12:44 +0100)
* include/bits/stl_algobase.h (__equal<true>::equal): Check length
instead of checking for null pointers.
(__lexicographical_compare<true>::__lc): Only check shorter length.

From-SVN: r223886

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/stl_algobase.h

index c7b3b2d5ff42623743749541657055633bc6b5a6..19a4c14eaca1041a7827c0df135661fc4ea2b0ad 100644 (file)
@@ -1,3 +1,9 @@
+2015-05-30  Jonathan Wakely  <jwakely@redhat.com>
+
+       * include/bits/stl_algobase.h (__equal<true>::equal): Check length
+       instead of checking for null pointers.
+       (__lexicographical_compare<true>::__lc): Only check shorter length.
+
 2015-05-29  François Dumont  fdumont@gcc.gnu.org>
 
        * include/debug/debug.h (_GLIBCXX_DEBUG_ASSERT,
index db065e2accda64e1dd2f34a80a2e5bdca2d640b1..12eb7ec61f80c902a266724b15d8bf20c50c6619 100644 (file)
@@ -812,11 +812,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
         static bool
         equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2)
         {
-         if (__first1 == 0 || __first2 == 0)
-           return __first1 == __last1;
-
-         return !__builtin_memcmp(__first1, __first2, sizeof(_Tp)
-                                  * (__last1 - __first1));
+         if (const size_t __len = (__last1 - __first1))
+           return !__builtin_memcmp(__first1, __first2, sizeof(_Tp) * __len);
+         return true;
        }
     };
 
@@ -920,14 +918,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        {
          const size_t __len1 = __last1 - __first1;
          const size_t __len2 = __last2 - __first2;
-         if (__len1 && __len2)
-           {
-             if (int __result = __builtin_memcmp(__first1, __first2,
-                                                 std::min(__len1, __len2)))
-               {
-                 return __result < 0;
-               }
-           }
+         if (const size_t __len = std::min(__len1, __len2))
+           if (int __result = __builtin_memcmp(__first1, __first2, __len))
+             return __result < 0;
          return __len1 < __len2;
        }
     };