<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>This fell out of my inbox...</div><div><br></div></div><div class="gmail_quote">On Mon, Mar 31, 2014 at 1:19 AM, Yaron Keren <span dir="ltr"><<a href="mailto:yaron.keren@gmail.com" target="_blank">yaron.keren@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="rtl"><div dir="ltr">OK, I followed the code path and indeed dwarf exceptions are disabled due to the wrong X86MCAsmInfo being selected. </div>
<div dir="ltr">Corrections to restore pre-r<span style="font-size:12.727272033691406px;font-family:arial,sans-serif">204978 functionality for </span><span style="font-size:12.727272033691406px;font-family:arial,sans-serif">X86MCTargetDesc committed in r205170.</span><br>


</div><div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br></span></div><div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Back to TargetInfo.cpp:6204. </span><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">Tracing the code </span></div>


<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br></span></div><div dir="ltr"><div dir="ltr"><font face="arial, sans-serif">    bool IsWin32FloatStructABI = Triple.isWindowsMSVCEnvironment();</font></div>


<div><font face="arial, sans-serif">[pre r204977 the code was = (Triple.getOS() == llvm::Triple::Win32) ]</font></div><div style="font-family:arial,sans-serif;font-size:12.727272033691406px"><br></div><div><span style="font-family:arial,sans-serif;font-size:small">shows that IsWin32<b>FloatStruct</b>ABI</span><span style="font-family:arial,sans-serif;font-size:small"> is used to set </span><font face="arial, sans-serif">IsWin32<b>Struct</b>ABI in X86_32ABIInfo constructor in </font><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">TargetInfo.cpp:582.</span></div>


<div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">The different descriptions in names, FloatStruct vs. Struct may indicate a problem as IsWin32StructABI applies to several conditions more than just passing floats around.</font></div>
</div></div></blockquote><div><br></div><div>IMO we should rename IsWin32FloatStructABI to IsWin32StructABI.  Or refactor the code altogether to split out the different OS variants of x86_32.  Or sink the OS down into X86_32ABIInfo.  Anything would be better, really.</div>
<div><br></div><div>I have plans to change the C++ ABI layering here.  I want the ABIInfo subclasses delegate out to CGCXXABI, which can optionally dictate how return values and parameters are passed.  If the C++ ABI doesn't say anything, we fall back to the C ABI rules covered by ABIInfo subclasses.  That should simplify the code a bit.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="rtl"><div dir="ltr"><div><font face="arial, sans-serif">Moreover, isn't MinGW is C ABI compatible with Visual C++? </font><span style="font-family:arial,sans-serif">If so, shouldn't this test apply to MinGW as well?</span></div>
</div></div></blockquote><div><br></div><div>MinGW isn't C ABI compatible with MSVC when passing or returning structs by value.</div></div></div></div>