bobsayshilol created this revision.
bobsayshilol added reviewers: mclow.lists, EricWF.
Herald added subscribers: cfe-commits, ldionne.
This allows a user replaced operator delete to modify or reuse returned memory
in the case where the size and capacity of a vector do not match upon
destruction and hence leave a portion of the memory poisoned.
This consequently also balances __annotate_delete() calls with those of
__annotate_new().
Repository:
rCXX libc++
https://reviews.llvm.org/D50101
Files:
include/vector
Index: include/vector
===================================================================
--- include/vector
+++ include/vector
@@ -540,13 +540,14 @@
value_type,
typename
iterator_traits<_ForwardIterator>::reference>::value>::type* = 0);
-#if _LIBCPP_DEBUG_LEVEL >= 2
_LIBCPP_INLINE_VISIBILITY
~vector()
{
+ __annotate_delete();
+#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__erase_c(this);
- }
#endif
+ }
vector(const vector& __x);
vector(const vector& __x, const allocator_type& __a);
Index: include/vector
===================================================================
--- include/vector
+++ include/vector
@@ -540,13 +540,14 @@
value_type,
typename iterator_traits<_ForwardIterator>::reference>::value>::type* = 0);
-#if _LIBCPP_DEBUG_LEVEL >= 2
_LIBCPP_INLINE_VISIBILITY
~vector()
{
+ __annotate_delete();
+#if _LIBCPP_DEBUG_LEVEL >= 2
__get_db()->__erase_c(this);
- }
#endif
+ }
vector(const vector& __x);
vector(const vector& __x, const allocator_type& __a);
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits