[LLVMdev] "Value in symtab but has no slot number!!"
Reid Spencer
reid at x10sys.com
Sat Jun 4 09:22:00 PDT 2005
Hi Ricardo,
On Fri, 2005-06-03 at 23:19 -0700, Ricardo wrote:
> 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);
> ---------------
>
Perfect! :)
Or, just:
llvm::verifyModule(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?
Unfortunately, this has me a bit baffled too. I think however, that you
need some corrections to your code, or at least to be a little more
explicit with your example. I note that you have
%Load_New__00 of type %binary_tree_0** with 0 uses. However, you're
passing %Load_New__001 of type %binary_Tree__0* into getelementptr.
While the type of %Load_New_001 is correct for the indexing (two
arguments), %Load_New_00 would require three. Other than that, I don't
see why the two argument form with values 0,0 would cause an assertion
on this. It certainly looks correct to me.
Then again, getelementptr has always baffled me a bit :)
Reid.
-------------- 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/20050604/cc4a9df2/attachment.sig>
More information about the llvm-dev
mailing list