[LLVMdev] Regarding anonymous types

Duncan Sands baldrick at free.fr
Tue Dec 6 12:10:34 PST 2011


Hi Pankaj, everything is different in the just release LLVM 3.0: the type system
was rewritten.  I think Chris wrote a blog post explaining the changes.  In
terms of LLVM-2.9 and earlier, please note that type names are meaningless and
are only produced by the front-end to make debugging LLVM IR easier.  You can't
expect to reliably discover which types correspond to types in the source using
type names for example, for that you need to use debug info.

Ciao, Duncan.

> While collecting type information for "anonymous types", I had below observation.
> For the example with anonymous types, given below
> struct test
> {
> struct {
> union {
> Char a[4];
> };
> };
> struct {
> int b;
> char c;
> };
> };
> LLVM 2.6 defines the types as
> %struct.anon1 = type { %union.anon0}
> %struct.anon2 = type { i32, i8}
> %struct.test = type { %struct.anon1, %struct.anon2}
> %union.anon0 = type {[4 x i8]}
> Whereas, LLVM 2.9 defines the types as
> %0 = type { i32, i8}
> %anonanonct. = type {%anonanonn.}
> %anonanonn.= type { [ 4x i8] }
> %struct.test = type { %anonanonct., %0}
> In case of LLVM2.9, "%0" is interesting case.
> When I try to extract types using " Module_Ptr->getTypeSymbolTable()".
> for(TypeSymbolTable::const_iterator I = M->getTypeSymbolTable().begin(),
> E = M->getTypeSymbolTable().end(); I != E; ++I) {
> if( I->second->isStructTy() )
> {
> //code to collect type names
> }
> }
> I don't get this type in TypeSymbolTable. :(
> Though
> struct{
> union {
> char a[4];
> };
> };
> too is anonymous, but a name is given to it, i.e anonanonct.
> I need this information as I want to collect all type-names.
> Thanks & Regards,
> Pankaj
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev




More information about the llvm-dev mailing list