[PATCH] D21320: Alternative to D1332
    Marshall Clow via cfe-commits 
    cfe-commits at lists.llvm.org
       
    Mon Jun 13 21:00:34 PDT 2016
    
    
  
mclow.lists created this revision.
mclow.lists added reviewers: EricWF, STL_MSFT.
mclow.lists added a subscriber: cfe-commits.
There's a bug in the standard, where the default deleter will always call `delete x`; even if `x` is an array type.  This shows up for `shared_ptr<T[]>`.
Do the right thing, and delete the array when you have one.
http://reviews.llvm.org/D21320
Files:
  include/memory
Index: include/memory
===================================================================
--- include/memory
+++ include/memory
@@ -2533,11 +2533,16 @@
     template <class _Up>
         _LIBCPP_INLINE_VISIBILITY default_delete(const default_delete<_Up>&,
              typename enable_if<is_convertible<_Up*, _Tp*>::value>::type* = 0) _NOEXCEPT {}
-    _LIBCPP_INLINE_VISIBILITY void operator() (_Tp* __ptr) const _NOEXCEPT
+
+    _LIBCPP_INLINE_VISIBILITY void
+    operator() (_Tp* __ptr) const _NOEXCEPT
         {
             static_assert(sizeof(_Tp) > 0, "default_delete can not delete incomplete type");
             static_assert(!is_void<_Tp>::value, "default_delete can not delete incomplete type");
-            delete __ptr;
+            if ( is_array<_Tp>::value )
+                delete [] __ptr;
+            else
+                delete __ptr;
         }
 };
 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D21320.60650.patch
Type: text/x-patch
Size: 880 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160614/ad386b28/attachment.bin>
    
    
More information about the cfe-commits
mailing list