<div dir="ltr"><div class="im" style="font-family:arial,sans-serif;font-size:13px">Now that I'm putting finishing touches on the Microsoft Record Layout patch (<a href="http://llvm-reviews.chandlerc.com/D1026" target="_blank">http://llvm-reviews.chandlerc.com/D1026</a>) there are some subtle issues that are cropping up with respect to compatibility with the ms_struct pragma/mms-bitfields flag.<div>
<br></div><div>The issues is that behavior of ms_struct/mms-bitfields is to use the Itanium layout rules for everything except alignment of long long, bitfields and bitfield padding.  This results in something that is Win32 ABI compatible for standard layout C++ structures but not otherwise.</div>
<div><br></div><div>It would be a maintenance win if we could remove all Microsoft related layout code from the Itanium builder and simply use the Microsoft builder when ms_struct or mms-bitfields is set.</div><div><br></div>
</div><div style="font-family:arial,sans-serif;font-size:13px">Does anyone object to making mms-bitfields/ms_struct mean "use Microsoft record layout" so we can deprecate the hybrid code?</div><div class="im" style="font-family:arial,sans-serif;font-size:13px">
<div><br></div><div>When using mms-bitfields/ms_struct should we throw an error if the record is not standard layout?</div></div><div style="font-family:arial,sans-serif;font-size:13px"><div><img src="https://mail.google.com/mail/ca/u/0/images/cleardot.gif"></div>
<div>Can we get rid of mms-bitfields in favor of ms_struct?  Is anyone using mms-bitfields?  Because mms-bitfields is global, it applies to the entire #include chain for a TU and can cause system structs etc to be laid out incorrectly and potentially silently break standard library interfaces/linking to TUs that don't have mms-bitfields, etc.</div>
<div><br></div><div>-Warren</div></div></div>