]> granicus.if.org Git - clang/commit
Provide a BuryPointer for unique_ptrs.
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 29 Aug 2014 16:53:14 +0000 (16:53 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 29 Aug 2014 16:53:14 +0000 (16:53 +0000)
commit680b6c0b6a7d21cf09da1b8aa4afff793f87d2cf
treee3cd69683e561c4426538e6198ca8df2a98ca9d0
parent93fef8fdde940e949152acea8e7d8921c6cdb208
Provide a BuryPointer for unique_ptrs.

In theory, it'd be nice if we could move to a case where all buried
pointers were buried via unique_ptr to demonstrate that the program had
finished with the value (that we could really have cleanly deallocated
it) but instead chose to bury it.

I think the main reason that's not possible right now is the various
IntrusiveRefCntPtrs in the Frontend, sharing ownership for a variety of
compiler bits (see the various similar
"CompilerInstance::releaseAndLeak*" functions). I have yet to figure out
their correct ownership semantics - but perhaps, even if the
intrusiveness can be removed, the shared ownership may yet remain and
that would lead to a non-unique burying as is there today. (though we
could model that a little better - by passing in a shared_ptr, etc -
rather than needing the two step that's currently used in those other
releaseAndLeak* functions)

This might be a bit more robust if BuryPointer took the boolean:

BuryPointer(bool, unique_ptr<T>)

and the choice to bury was made internally - that way, even when
DisableFree was not set, the unique_ptr would still be null in the
caller and there'd be no chance of accidentally having a different
codepath where the value is used after burial in !DisableFree, but it
becomes null only in DisableFree, etc...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@216742 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/Frontend/CompilerInstance.h
include/clang/Frontend/Utils.h
lib/CodeGen/BackendUtil.cpp
lib/Frontend/CompilerInstance.cpp
lib/FrontendTool/ExecuteCompilerInvocation.cpp