re PR libstdc++/41267 (vector<>::resize() from an empty vector calls memmove for 0 bytes (twice), wasting a lot of cpu time in a production PowerDNS)

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
This commit is contained in:
Paolo Carlini 2009-09-06 15:41:38 +00:00 committed by Paolo Carlini
parent 0d8d6c874e
commit f7d601a5bd
2 changed files with 13 additions and 4 deletions

View 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.

View 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;
}
};