Hello, I am receiving this error: assert(Slot != -1 && "Value in symtab but has no slot number!!"); While trying to generate a module at run time using LLVM classes. Specifically with an instance of StoreInst class. After I generate all the instructions, I try to save the Module to bytecode, but I receive that error in the method 'outputSymbolTable' Does anyone have any idea of why this can be happening? Thanks in advance
Hi Ricardo, Yes, its because you have an invalid module. You should run Module::verify before attempting to write the bytecode. This will pinpoint the problem for you. However, I think I know what's going on: you've left an object (a Value not a Type) in the symbol table that is not in the Module. Not quite sure how you do that, but I suppose its possible if you manipulated the symbol table directly (don't do that!) :) Maybe you have a labeled basic block that you never inserted into the function? Reid. On Fri, 2005-06-03 at 22:17 -0700, Ricardo wrote:> Hello, > > I am receiving this error: > > assert(Slot != -1 && "Value in symtab but has no slot number!!"); > > While trying to generate a module at run time using LLVM classes. Specifically with an instance of > StoreInst class. After I generate all the instructions, I try to save the Module to bytecode, but > I receive that error in the method 'outputSymbolTable' > > Does anyone have any idea of why this can be happening? > > Thanks in advance > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050603/2f8c6052/attachment.sig>
Ricardo, I was a little misleading in my last email (below). There is no Module::verify method. I was using shorthand but it looks like a class/method pair. The verification pass is found in the header file "llvm/Analysis/Verifier.h" and the function to call is: bool llvm::verifyModule(const Module &M, VerifierFailureAction action) See the header file for more details. Reid. On Fri, 2005-06-03 at 22:29 -0700, Reid Spencer wrote:> Hi Ricardo, > > Yes, its because you have an invalid module. You should run > Module::verify before attempting to write the bytecode. This will > pinpoint the problem for you. However, I think I know what's going on: > you've left an object (a Value not a Type) in the symbol table that is > not in the Module. Not quite sure how you do that, but I suppose its > possible if you manipulated the symbol table directly (don't do > that!) :) Maybe you have a labeled basic block that you never inserted > into the function? > > Reid. > > On Fri, 2005-06-03 at 22:17 -0700, Ricardo wrote: > > Hello, > > > > I am receiving this error: > > > > assert(Slot != -1 && "Value in symtab but has no slot number!!"); > > > > While trying to generate a module at run time using LLVM classes. Specifically with an instance of > > StoreInst class. After I generate all the instructions, I try to save the Module to bytecode, but > > I receive that error in the method 'outputSymbolTable' > > > > Does anyone have any idea of why this can be happening? > > > > Thanks in advance > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev-------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 189 bytes Desc: This is a digitally signed message part URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20050603/a59c8307/attachment.sig>
Hi Reid, Thanks for your help! I could detect the problem and the module now can be saved (it was a problem with some Alloca instructions). I could not find a "verify" method in the Module class, but just for the records, I did this: --------------- PassManager Passes; // Add an appropriate TargetData instance for this module... Passes.add(new TargetData("save", ModuleToSave)); // Make sure the input LLVM is well formed. Passes.add(createVerifierPass()); Passes.run(*ModuleToSave); --------------- I got stuck in another problem. I suppose it's very simple but I do not really know what is happening. I have a module like this: ------------------------------------ %binary_tree__0 = type { int, %binary_tree__0*, %binary_tree__0* } ... %New__0 = alloca %binary_tree__0* ; <%binary_tree__0**> [#uses=8] ... %Load_New__00 = load %binary_tree__0** %New__0 ; <%binary_tree__0*> [#uses=0] ... %gep.1 = getelementptr %binary_tree__0* %Load_New__001, int 0, uint 0 ; ... ------------------------------------ Gives the error: --------------- const llvm::Type* checkType(const llvm::Type*): Assertion `Ty && "Invalid indices for type!"' --------------- However if I replace the last line for this: --------------- %gep.1 = getelementptr %binary_tree__0* %Load_New__001, int 0, uint 1 ; ... --------------- Where the second index is 1 or 2, it works well. This means that I can obtain the second and third fields using getelementptr but not the first one! (which is an integer) Could you please help me? Thanks! --- Reid Spencer <reid at x10sys.com> wrote:> Hi Ricardo, > > Yes, its because you have an invalid module. You should run > Module::verify before attempting to write the bytecode. This will > pinpoint the problem for you. However, I think I know what's going on: > you've left an object (a Value not a Type) in the symbol table that is > not in the Module. Not quite sure how you do that, but I suppose its > possible if you manipulated the symbol table directly (don't do > that!) :) Maybe you have a labeled basic block that you never inserted > into the function? > > Reid. > > On Fri, 2005-06-03 at 22:17 -0700, Ricardo wrote: > > Hello, > > > > I am receiving this error: > > > > assert(Slot != -1 && "Value in symtab but has no slot number!!"); > > > > While trying to generate a module at run time using LLVM classes. Specifically with an > instance of > > StoreInst class. After I generate all the instructions, I try to save the Module to bytecode, > but > > I receive that error in the method 'outputSymbolTable' > > > > Does anyone have any idea of why this can be happening? > > > > Thanks in advance > > > > _______________________________________________ > > LLVM Developers mailing list > > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > > http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev >