[LLVMdev] Recursive Types using the llvm support library
John Carrino
jacarrin at uiuc.edu
Sun Mar 20 18:27:26 PST 2005
On Sun, Mar 20, 2005 at 07:01:55PM -0600, Chris Lattner wrote:
> On Sun, 20 Mar 2005, John Carrino wrote:
>
> >On Wed, Mar 09, 2005 at 04:05:32PM +0300, Vladimir Merzliakov wrote:
> >>>>Is assert(!NewSTy->isAbstract()) must pass after this line?
> >>>
> >>>In this case, yup.
> >>>
> >>I create test program and assert failed in it:
> >>
> >>{ \2 *, sbyte * }
> >
> >How do I decode the \2 in this? I am creating types through this
> >interface and I get quite a mess seen below. And this is relatively
> >simple. Any ideas?
>
> "\2" is an upreference, which refers to a containing type. For example,
> this type:
>
> \1*
>
> Is a pointer to pointer to pointer to pointer.... In "{\2*}", the
> upreference refers to the structure type, not the pointer, with \4, it
> means go 4 types up etc.
>
> In practice, this is leads to a horrible mess, as you've noticed. As
> such, I'd suggest using Module::addTypeName to give these things names so
> that you have a hope to understand them and so they are more compact :)
I took your advide and used Module::addTypeName which is a great idea
that I didn't know about.
Now I am getting a seg fault, here
SymbolTable.cpp:251
if (T->isAbstract()) {
cast<DerivedType>(T)->addAbstractTypeUser(this);
I am assuming the patch mentioned earlier on the thread will fix this.
I just wanted to ask to make sure before i went ahead and recompiled.
-John
More information about the llvm-dev
mailing list