Chris Lattner wrote:>>> You probably have an instruction that you removed from the module but >>> didn't delete. The module dtor works fine: it uses >>> 'dropAllReferences' to clear the operands of instructions before >>> deleting the instructions themselves. >>> >>> >> Okay. I wasn't aware I had to delete unneeded values as well as >> remove >> them. I'll try that. >> > > The convention is that 'remove' unlinks the object from the IR, and > 'erase' does remove and deletes the result. > > If someone wants to clarify this behavior in http://llvm.org/docs/ProgrammersManual.html#common > , it would be nice :) >No, I understood that part (granted, I read DoxyGen). The part I didn't understand is that I'm required to erase an instruction that should have no more uses before deleting the Module. If I get time, I can try to add some text about it. -- John T.> -Chris > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
On Feb 15, 2008, at 3:01 PM, John Criswell wrote:>> The convention is that 'remove' unlinks the object from the IR, and >> 'erase' does remove and deletes the result. >> >> If someone wants to clarify this behavior in http://llvm.org/docs/ProgrammersManual.html#common >> , it would be nice :) >> > No, I understood that part (granted, I read DoxyGen). The part I > didn't > understand is that I'm required to erase an instruction that should > have > no more uses before deleting the Module.That's what the assertion is telling you (poorly) :). It is saying that there is something that uses a value that is attempting to be deleted. It doesn't know the context, so it can't tell you that the user is something that was unlinked but not deleted. If you write your code as an llvm pass, you should automatically get notified of this stuff in a debug build. If you can't do that, manually interfacing to the LeakDetector can help. -Chris
Chris Lattner wrote:> On Feb 15, 2008, at 3:01 PM, John Criswell wrote: > > >>> The convention is that 'remove' unlinks the object from the IR, and >>> 'erase' does remove and deletes the result. >>> >>> If someone wants to clarify this behavior in http://llvm.org/docs/ProgrammersManual.html#common >>> , it would be nice :) >>> >>> >> No, I understood that part (granted, I read DoxyGen). The part I >> didn't >> understand is that I'm required to erase an instruction that should >> have >> no more uses before deleting the Module. >> > > That's what the assertion is telling you (poorly) :). It is saying > that there is something that uses a value that is attempting to be > deleted. It doesn't know the context, so it can't tell you that the > user is something that was unlinked but not deleted. > > If you write your code as an llvm pass, you should automatically get > notified of this stuff in a debug build. If you can't do that, > manually interfacing to the LeakDetector can help. >It is an LLVM pass, it's a debug build, and the only assertion I got was the one in ~Value(). Should there have been an earlier assertion? -- John T.> -Chris > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >