Regarding anonymous types

Hi All,

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}

Pankaj,

I encourage you to read Chris’s excellent blog entry on type system @ http://blog.llvm.org/2011/11/llvm-30-type-system-rewrite.html

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.

Thanks for sharing the link.
I had a similar link by chris, but it was a small text document.
This link was helpful in understanding how the anonymous types, and specially the numbered types, are so represented.

Thanks & Regards,
Pankaj