[LLVMdev] Recursive Types using the llvm support library

Chris Lattner sabre at nondot.org
Tue Mar 8 07:31:41 PST 2005


On Tue, 8 Mar 2005, Vladimir Merzliakov wrote:

>>> An example where something really simple like the line below was output
>>> would be perfect.
>>> 
>>> %struct.linked_list = type { %struct.linked_list*, %sbyte* }
>> 
>> Use something like this:
>> 
>>   PATypeHolder StructTy = OpaqueType::get();
>>   std::vector<const Type*> Elts;
>>   Elts.push_back(PointerType::get(StructTy));
>>   Elts.push_back(PointerType::get(Type::SByteTy));
>>   StructType *NewSTy = StructType::get(Elts);
>> 
>>   // At this point, NewSTy = "{ opaque*, sbyte* }", tell VMCore that
>>   // the struct and the opaque type are actually the same.
>>   cast<OpaqueType>(StructTy.get())->refineAbstractTypeTo(NewSTy);
>> 
>>   // NewSTy is potentially invalidated, but StructTy (a PATypeHolder) is
>>   // kept up-to-date.
>>   NewSTy = StructTy.get();
>> 
> Is assert(!NewSTy->isAbstract()) must pass  after this line?

In this case, yup.

-Chris

-- 
http://nondot.org/sabre/
http://llvm.cs.uiuc.edu/




More information about the llvm-dev mailing list