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

Christian Schafmeister chris.schaf at verizon.net
Mon Jan 26 10:56:55 PST 2015


Thank you - I’ll give ASan a try - it may alert/protect me from other problems that come up down the road.
This is almost certainly a memory management problem on my end.   I was managing the DebugLoc’s lifetime using my copying garbage collector.
I implemented a work around where I don’t expose the DebugLoc to my garbage collector and the problem went away.



On Jan 25, 2015, at 8:55 PM, Duncan P. N. Exon Smith <dexonsmith at apple.com> wrote:

> 
>> 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