[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