[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