[LLVMdev] "Expected to drop a reference" assertion thrown

Duncan P. N. Exon Smith dexonsmith at apple.com
Sun Jan 25 17:55:10 PST 2015


> On 2015 Jan 23, at 22:31, Christian Schafmeister <chris.schaf at verizon.net> wrote:
> 
> 
> Hello,
> 
> A few days ago I upgraded to the LLVM/clang ToT (on Jan 19th or so)  and I just encountered this assertion.
> 
> “Expected to drop a reference”  which is defined in llvm/lib/IR/Metadata.cpp line 136.
> 
> 
> I create DebugLoc objects using DebugLog:get(unsigned line, unsigned Col, MDNode *Scope, MDNode *InlinedAt=nullptr)
> 
> The DebugLoc objects are wrapped in one of my classes and when instances get destructed the assertion is thrown.
> 
> Would anyone have an idea what I’m doing wrong that causes this?

The first thing I'd try is recompiling with ASan support.  All the cases
I've seen of this assertion firing are use-after-frees.

Likely your `LLVMContext` has been destroyed already by the time this
`DebugLoc` is deleted.  Since `LLVMContext` teardown assumes that there
aren't any live tracking references to metadata, you need to `reset()` or
destroy the `DebugLoc`s before destroying the context.



More information about the llvm-dev mailing list