<div dir="ltr">Are you sure the base subobject type is actually bigger? If so, that's a bug. Note that unpacked LLVM struct types can have tail padding, so these two structs have the same size on a 64-bit platform:<div>{ i8*, i32 }</div><div><{ i8*, i32, [4 x i8] }></div><div><br></div><div>The size is rounded up to the natural alignment of the struct.</div><div><br></div><div>The second function returns a type that is usable in a derived class. This class might lower to <{ void (i8*)*, i8 }> as the base subobject type and { void (i8*)*, i8 } as the complete type, for example:</div><div>class A {</div><div>  virtual void f();</div><div>  char a;<br>};</div><div><br></div><div>Because when B derives from A, it can use the tail padding of A like so:</div><div>class B : public A {</div><div> char b; <br>};</div><div><br></div><div>B's LLVM type could be <{ <{ void (i8*)*, i8 }>, i8 }></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 30, 2014 at 4:34 AM, Evgeny Astigeevich <span dir="ltr"><<a href="mailto:evgeny.astigeevich@arm.com" target="_blank">evgeny.astigeevich@arm.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-US" link="blue" vlink="purple"><div><p class="MsoNormal"><span lang="EN-GB">Hi all,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">I see that CGRecordLayout has two member functions:<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">llvm::StructType *           getLLVMType () const<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB">llvm::StructType *           getBaseSubobjectLLVMType () const<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">The second one is used only by EmitNullConstant when the parameter asCompleteObject is false.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">What kind of type should the function getBaseSubobjectLLVMType return? Should it always be less or equal to the type returned by getLLVMType?<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">For one of my tests I have that getBaseSubobjectLLVMType returns a bigger packed version of the type returned by getLLVMType. It is bigger because padding has been added.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB">Kind regards,<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB">Evgeny<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-GB"><u></u> <u></u></span></p></div></div><br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div>