aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2018-11-09 20:14:07 +0000
committerJonathan Wakely <redi@gcc.gnu.org>2018-11-09 20:14:07 +0000
commit213fd71709e40dbcf601f765e80a56b1c624e4a8 (patch)
tree532eb077ffff67fdf71a4b61f0dfeb105e04dbae
parentfcc499722be30b540eb1c163bfe39d23c9164ae0 (diff)
downloadgcc-213fd71709e40dbcf601f765e80a56b1c624e4a8.zip
gcc-213fd71709e40dbcf601f765e80a56b1c624e4a8.tar.gz
gcc-213fd71709e40dbcf601f765e80a56b1c624e4a8.tar.bz2
PR libstdc++/87787 fix UBsan error in std::vector
PR libstdc++/87787 * include/bits/stl_uninitialized.h (__relocate_a_1): Do not call memmove when there's nothing to copy (and pointers could be null). From-SVN: r265984
-rw-r--r--libstdc++-v3/ChangeLog6
-rw-r--r--libstdc++-v3/include/bits/stl_uninitialized.h3
2 files changed, 8 insertions, 1 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 755b2c2..2a694d96 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,9 @@
+2018-11-09 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/87787
+ * include/bits/stl_uninitialized.h (__relocate_a_1): Do not call
+ memmove when there's nothing to copy (and pointers could be null).
+
2018-11-07 Hafiz Abid Qadeer <abidh@codesourcery.com>
* configure: Regenerated.
diff --git a/libstdc++-v3/include/bits/stl_uninitialized.h b/libstdc++-v3/include/bits/stl_uninitialized.h
index 94c7e15..8839bfd 100644
--- a/libstdc++-v3/include/bits/stl_uninitialized.h
+++ b/libstdc++-v3/include/bits/stl_uninitialized.h
@@ -904,7 +904,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_Tp* __result, allocator<_Up>& __alloc)
{
ptrdiff_t __count = __last - __first;
- __builtin_memmove(__result, __first, __count * sizeof(_Tp));
+ if (__count > 0)
+ __builtin_memmove(__result, __first, __count * sizeof(_Tp));
return __result + __count;
}