<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 24, 2020 at 3:55 PM Eli Friedman via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div lang="EN-US">
<div>
<p class="MsoNormal">Assuming I’m understanding the rule correctly, it doesn’t actually affect “alignment” of the type in the sense we would normally understand it. A struct with a double as the first member can be stored at an address with four-byte alignment.
The rule only involves inserting extra padding at the end of the struct. In particular, from the way you’re describing the rule, I think the special alignment rule isn’t supposed to affect the result of _Alignof. Does that seem right?</p></div></div></blockquote><div>The reference implementations on AIX indicate that the result of <span style="font-family:monospace">_Alignof</span> is affected.</div><div><br></div><div>C:<br></div><div><span style="font-family:monospace">typedef struct A { double x; int y; } A;<br>extern char x[_Alignof(A)];<br>extern char x[8];</span></div><div><br></div><div>C++:</div><div><span style="font-family:monospace">struct A {<br> A(const A &);<br> double x; int y;<br>};<br>struct B : A { int z; };<br><br>extern char x[sizeof(B)];<br>extern char x[16];<br><br>extern char y[alignof(A)];<br>extern char y[8];<br></span></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div><p class="MsoNormal"><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Given that, do you actually need to store anything in the RecordLayout at all?</p></div></div></blockquote><div>Does the new information change your analysis or it is still worthwhile to internally treat the alignment as the lower value (and add special code to introduce the padding-for-preferred-alignment)?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div>Also, probably worth checking the layout for a testcase like the following, to check the interaction between the extra padding and the nvsize:
<br>[ ... ]<br></div></div></blockquote><div>Thanks; done above. The padding does not occur within the nvsize. I guess you also mean that we should check this against the new implementation as well.<br></div></div></div>