[libcxx] r271459 - Remove enable_shared_from_this test since it leaks the control block and fails with ASAN
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Wed Jun 1 22:03:39 PDT 2016
Fixed in r271487.
On Wed, Jun 1, 2016 at 10:56 PM, Eric Fiselier <eric at efcs.ca> wrote:
> Nevermind my last comment. It's just a bug in my implementation. Thanks
> again for catching it.
>
> On Wed, Jun 1, 2016 at 10:40 PM, Eric Fiselier <eric at efcs.ca> wrote:
>
>> Oh goodness your right. There are a bunch of bugs in the shared_ptr
>> constructors/destructors use both the specified deleters and allocators.
>>
>> Thanks for pointing out my stupidity!
>>
>> On Wed, Jun 1, 2016 at 10:25 PM, Arthur O'Dwyer <
>> arthur.j.odwyer at gmail.com> wrote:
>>
>>> On Wed, Jun 1, 2016 at 7:00 PM, Eric Fiselier <eric at efcs.ca> wrote:
>>>
>>>> No the leak was my fault. The sneaky line was "std::shared_ptr<T>
>>>> s(ptr, &nullDeleter);", which caused the allocation of a shared control
>>>> block.
>>>>
>>>
>>> But surely the control block is allocated and deallocated by libc++
>>> behind the scenes, foolproofly?
>>>
>>>
>>>> Since the deleter is a NOP it gets leaked and ASAN reports it.
>>>>
>>>
>>> Surely the NOP deleter applies only to the controlled object *ptr, not
>>> to the control block? Is the supplied deleter actually used to
>>> allocate/deallocate the control block as well?
>>>
>>> The controlled object *ptr is explicitly delete'd at the end of the test
>>> case, which is why it seems safe to me.
>>>
>>> –Arthur
>>>
>>>
>>> On Jun 1, 2016 6:15 PM, "Eric Fiselier via cfe-commits" <
>>> cfe-commits at lists.llvm.org> wrote:
>>>
>>>> Author: ericwf
>>>>>> Date: Wed Jun 1 20:09:12 2016
>>>>>> New Revision: 271459
>>>>>>
>>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=271459&view=rev
>>>>>> Log:
>>>>>> Remove enable_shared_from_this test since it leaks the control block
>>>>>> and fails with ASAN
>>>>>>
>>>>>> Modified:
>>>>>>
>>>>>> libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp
>>>>>>
>>>>>> Modified:
>>>>>> libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp
>>>>>> URL:
>>>>>> http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp?rev=271459&r1=271458&r2=271459&view=diff
>>>>>>
>>>>>> ==============================================================================
>>>>>> ---
>>>>>> libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp
>>>>>> (original)
>>>>>> +++
>>>>>> libcxx/trunk/test/std/utilities/memory/util.smartptr/util.smartptr.enab/enable_shared_from_this.pass.cpp
>>>>>> Wed Jun 1 20:09:12 2016
>>>>>> @@ -88,32 +88,6 @@ int main()
>>>>>> }
>>>>>> #endif
>>>>>> }
>>>>>> - // Test LWG issue 2529 again. This time check that an expired
>>>>>> pointer
>>>>>> - // is replaced.
>>>>>> - {
>>>>>> - T* ptr = new T;
>>>>>> - std::weak_ptr<T> weak;
>>>>>> - {
>>>>>> - std::shared_ptr<T> s(ptr, &nullDeleter);
>>>>>> - assert(ptr->shared_from_this() == s);
>>>>>> - weak = s;
>>>>>> - assert(!weak.expired());
>>>>>> - }
>>>>>> - assert(weak.expired());
>>>>>> - weak.reset();
>>>>>> -#ifndef TEST_HAS_NO_EXCEPTIONS
>>>>>> - try {
>>>>>> - ptr->shared_from_this();
>>>>>> - assert(false);
>>>>>> - } catch (std::bad_weak_ptr const&) {
>>>>>> - } catch (...) { assert(false); }
>>>>>> -#endif
>>>>>> - {
>>>>>> - std::shared_ptr<T> s2(ptr, &nullDeleter);
>>>>>> - assert(ptr->shared_from_this() == s2);
>>>>>> - }
>>>>>> - delete ptr;
>>>>>> - }
>>>>>> // Test weak_from_this_methods
>>>>>> #if TEST_STD_VER > 14
>>>>>> {
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> cfe-commits mailing list
>>>>>> cfe-commits at lists.llvm.org
>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160601/dff77652/attachment.html>
More information about the cfe-commits
mailing list