[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