<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Pankaj,<div><br></div><div>I encourage you to read Chris's excellent blog entry on type system @ <a href="http://blog.llvm.org/2011/11/llvm-30-type-system-rewrite.html">http://blog.llvm.org/2011/11/llvm-30-type-system-rewrite.html</a></div><div>-</div><div>Devang</div><div><br><div><div>On Dec 6, 2011, at 3:54 AM, Pankaj Gode wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div><div style="color:#000; background-color:#fff; font-family:Courier New, courier, monaco, monospace, sans-serif;font-size:10pt"><div style="RIGHT: auto" class="MsoNormal">Hi All,</div>
<div style="RIGHT: auto" class="MsoNormal"><var id="yui-ie-cursor"></var> </div>
<div style="RIGHT: auto" class="MsoNormal">While collecting type information for "anonymous types", I had below observation.</div>
<div style="RIGHT: auto" class="MsoNormal"> </div>
<div style="RIGHT: auto" class="MsoNormal">For the example with anonymous types, given below</div>
<div style="RIGHT: auto" class="MsoNormal">struct test <!--?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /--><o:p style="RIGHT: auto"></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">{<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">  s</span>truct {<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">    u</span>nion {<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">      </span>Char a[4];<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">   </span><span style="mso-spacerun: yes"> </span>};<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes"> </span><span style="mso-spacerun: yes"> </span>};<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">  s</span>truct {<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">    i</span>nt b;<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">    c</span>har c;<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><span style="RIGHT: auto; mso-spacerun: yes">  </span>};<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">};<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"> </o:p></div>
<div style="RIGHT: auto" class="MsoNormal">LLVM 2.6 defines the types as <o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%struct.anon1 = type { %union.anon0}<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%struct.anon2 = type { i32, i8}</div>
<div style="RIGHT: auto" class="MsoNormal">%struct.test = type { %struct.anon1, %struct.anon2}</div>
<div style="RIGHT: auto" class="MsoNormal">%union.anon0 = type {[4 x i8]}</div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"> </o:p></div>
<div style="RIGHT: auto" class="MsoNormal">Whereas, LLVM 2.9 defines the types as<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%0 = type { i32, i8}<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%anonanonct. = type {%anonanonn.}<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%anonanonn.<span style="mso-spacerun: yes">  </span>= type { [ 4x i8] }<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal">%struct.test = type { %anonanonct., %0}<o:p></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">In case of LLVM2.9, "%0" is interesting case.  </o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">When I try to extract types using "</o:p><o:p style="RIGHT: auto">Module_Ptr->getTypeSymbolTable()".</o:p><o:p style="RIGHT: auto"></o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">for(TypeSymbolTable::const_iterator I = M->getTypeSymbolTable().begin(),<br>      E = M->getTypeSymbolTable().end(); I != E; ++I) {</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">   if( I->second->isStructTy() )</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">   {</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">     //code to collect type names</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">   }</o:p><o:p style="RIGHT: auto">     </o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">}</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">I don't get this type in TypeSymbolTable.  :( </o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">Though </o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">struct{</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"> union {</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">   char a[4];</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"> };</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">};</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">too is anonymous, but a name is given to it, i.e anonanonct. </o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div><o:p style="RIGHT: auto">
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">I need this information as I want to collect all type-names. </o:p></div></o:p>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">Thanks & Regards,</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto">Pankaj</o:p></div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div>
<div style="RIGHT: auto" class="MsoNormal"><o:p style="RIGHT: auto"></o:p> </div></div></div>_______________________________________________<br>LLVM Developers mailing list<br><a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu">http://llvm.cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br></blockquote></div><br></div></body></html>