[LLVMdev] "Value in symtab but has no slot number!!"

Ricardo rmivs-jygf at yahoo.com
Fri Jun 3 23:19:13 PDT 2005


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
> 




More information about the llvm-dev mailing list