[LLVMdev] Possible SelectionDAG Bug

Dan Gohman gohman at apple.com
Mon Mar 1 18:32:07 PST 2010


On Mar 1, 2010, at 1:59 PM, David Greene wrote:

> On Monday 01 March 2010 13:41:12 Dan Gohman wrote:
>> On Mar 1, 2010, at 7:26 AM, David Greene wrote:
>>>> Perhaps this can be fixed by making the code skip the ReplaceUses
>>>> call in the case where there are no uses to replace.  That's not trivial
>>>> to detect though.
>>> 
>>> Why not just check the same thing the added asserts check?
>> 
>> You mean ->getOpcode() == ISD::DELETED_NODE? That's not fundamentally
>> any better, because if your purpose is to make this code work even
>> if nodes are actually deleted, that would still be a use of free'd
>> memory.
> 
> Wait, I thought memory wasn't actually freed, just returned to a free list.
> 
>>> UI goes bad and we blow up after returning from a deeply recursed call.
>>> 
>>> It's simply not safe to iterate over a set that may change. 
>>> Unfortunately, any of the nodes under the iterators may change so I don't
>>> see an easy way to fix this.
>> 
>> The thing it's iterating over is a linked list. And the use_end() iterator
>> is essentially a null pointer.
> 
> No, what I mean is the thing under UI at the point of call to  
> AddModifiedNodeToCSEMaps gets deleted.  So UI is invalid and when
> we loop back around and check it against UE we blow up with a
> singular iterator error.

UI is incremented before AddModifiedNodeToCSEMaps is called, so
I'm still not seeing what you're describing here.

Dan




More information about the llvm-dev mailing list