Commit 6759edde by Jonathan Wakely Committed by Jonathan Wakely

re PR libstdc++/66327 (-fsanitize=nonnull-attribute errors in stl_algobase.h)

	PR libstdc++/66327
	* include/bits/stl_algobase.h (__equal<true>::equal): Do not call
	memcmp with null pointers.
	(__lexicographical_compare<true>::__lc): Do not call memcmp for empty
	ranges.

From-SVN: r223865
parent ca382af0
2015-05-29 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/66327
* include/bits/stl_algobase.h (__equal<true>::equal): Do not call
memcmp with null pointers.
(__lexicographical_compare<true>::__lc): Do not call memcmp for empty
ranges.
2015-05-28 Jonathan Wakely <jwakely@redhat.com> 2015-05-28 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/65352 PR libstdc++/65352
......
...@@ -812,6 +812,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -812,6 +812,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
static bool static bool
equal(const _Tp* __first1, const _Tp* __last1, const _Tp* __first2) 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) return !__builtin_memcmp(__first1, __first2, sizeof(_Tp)
* (__last1 - __first1)); * (__last1 - __first1));
} }
...@@ -917,9 +920,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION ...@@ -917,9 +920,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ {
const size_t __len1 = __last1 - __first1; const size_t __len1 = __last1 - __first1;
const size_t __len2 = __last2 - __first2; const size_t __len2 = __last2 - __first2;
const int __result = __builtin_memcmp(__first1, __first2, if (__len1 && __len2)
std::min(__len1, __len2)); {
return __result != 0 ? __result < 0 : __len1 < __len2; if (int __result = __builtin_memcmp(__first1, __first2,
std::min(__len1, __len2)))
{
return __result < 0;
}
}
return __len1 < __len2;
} }
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment