re PR libstdc++/41267 (vector<>::resize() from an empty vector calls memmove for...
authorPaolo Carlini <paolo.carlini@oracle.com>
Sun, 6 Sep 2009 15:41:38 +0000 (15:41 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sun, 6 Sep 2009 15:41:38 +0000 (15:41 +0000)
2009-09-06  Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/41267
* include/bits/stl_algobase.h (__copy_move::__copy_m,
__copy_move_backward::__copy_move_b): Don't call __builtin_memmove
with a null third argument.

From-SVN: r151459

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

index 44da8a3..acc7355 100644 (file)
@@ -1,3 +1,10 @@
+2009-09-06  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/41267
+       * include/bits/stl_algobase.h (__copy_move::__copy_m,
+       __copy_move_backward::__copy_move_b): Don't call __builtin_memmove
+       with a null third argument.
+
 2009-09-04  Benjamin Kosnik  <bkoz@redhat.com>
 
        Revert.
index 2cef923..c638c54 100644 (file)
@@ -375,9 +375,10 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
         static _Tp*
         __copy_m(const _Tp* __first, const _Tp* __last, _Tp* __result)
         {
-         __builtin_memmove(__result, __first,
-                           sizeof(_Tp) * (__last - __first));
-         return __result + (__last - __first);
+         const ptrdiff_t _Num = __last - __first;
+         if (_Num)
+           __builtin_memmove(__result, __first, sizeof(_Tp) * _Num);
+         return __result + _Num;
        }
     };
 
@@ -572,7 +573,8 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
         __copy_move_b(const _Tp* __first, const _Tp* __last, _Tp* __result)
         {
          const ptrdiff_t _Num = __last - __first;
-         __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
+         if (_Num)
+           __builtin_memmove(__result - _Num, __first, sizeof(_Tp) * _Num);
          return __result - _Num;
        }
     };