<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:1.2em 0px!important">This is my first time using Phabricator. It seems like Phabricator is not CCing the list, so I’ll post a link here.</p>
<p style="margin:1.2em 0px!important"><a href="http://reviews.llvm.org/D12099">http://reviews.llvm.org/D12099</a></p>
<p style="margin:1.2em 0px!important">Summary:</p>
<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);border-radius:3px;display:inline;background-color:rgb(248,248,248);white-space:pre;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block!important">
The x86 MSVC CRT library does not contain a fmodf(f32) function. It
only has the 64-bit fmod(f64) function.

Inside the MSVC CRT C headers, fmodf(f32) is defined as an inline
function which casts the f32 into an f64 and calls fmod(f64),
casting the result back. The fmodf function is never emitted into the
CRT lib.

This patch fixes this by instead promoting a 32-bit FREM into a 64-bit
FREM, but only on a 32-bit MSVC target.

This fixes an undefined symbol: fmodf error when linking on 32-bit
Windows.
</code></pre><div title="MDH:VGhpcyBpcyBteSBmaXJzdCB0aW1lIHVzaW5nIFBoYWJyaWNhdG9yLiBJdCBzZWVtcyBsaWtlIFBo
YWJyaWNhdG9yIGlzIG5vdCBDQ2luZyB0aGUgbGlzdCwgc28gSSdsbCBwb3N0IGEgbGluayBoZXJl
LDxkaXY+PGJyPjwvZGl2PjxkaXY+PGEgaHJlZj0iaHR0cDovL3Jldmlld3MubGx2bS5vcmcvRDEy
MDk5Ij5odHRwOi8vcmV2aWV3cy5sbHZtLm9yZy9EMTIwOTk8L2E+PGJyPjwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+U3VtbWFyeTo8L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+PHAgc3R5bGU9Im1h
cmdpbjogMHB4IDBweCAxMnB4OyBwYWRkaW5nOiAwcHg7IGJvcmRlcjogMHB4OyBjb2xvcjogcmdi
KDAsIDAsIDApOyBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgJ1NlZ29lIFVJIFdlYiBSZWd1bGFy
JywgJ1NlZ29lIFVJIFN5bWJvbCcsICdIZWx2ZXRpY2EgTmV1ZScsIEhlbHZldGljYSwgQXJpYWws
IHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6IDE4Ljg1MDAwMDM4MTQ2
OTdweDsiPlRoZSB4ODYgTVNWQyBDUlQgbGlicmFyeSBkb2VzIG5vdCBjb250YWluIGEmbmJzcDs8
dHQgY2xhc3M9InJlbWFya3VwLW1vbm9zcGFjZWQiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCA1MSwg
NTEpOyBwYWRkaW5nOiAwcHggNHB4OyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJhY2tncm91bmQ6
IHJnYigyMzUsIDIzNSwgMjM1KTsiPmZtb2RmKGYzMik8L3R0PiZuYnNwO2Z1bmN0aW9uLiBJdDxi
cj5vbmx5IGhhcyB0aGUgNjQtYml0Jm5ic3A7PHR0IGNsYXNzPSJyZW1hcmt1cC1tb25vc3BhY2Vk
IiBzdHlsZT0iY29sb3I6IHJnYig1MSwgNTEsIDUxKTsgcGFkZGluZzogMHB4IDRweDsgd2hpdGUt
c3BhY2U6IHByZS13cmFwOyBiYWNrZ3JvdW5kOiByZ2IoMjM1LCAyMzUsIDIzNSk7Ij5mbW9kKGY2
NCk8L3R0PiZuYnNwO2Z1bmN0aW9uLjwvcD48cCBzdHlsZT0ibWFyZ2luOiAwcHggMHB4IDEycHg7
IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7IGNvbG9yOiByZ2IoMCwgMCwgMCk7IGZvbnQtZmFt
aWx5OiAnU2Vnb2UgVUknLCAnU2Vnb2UgVUkgV2ViIFJlZ3VsYXInLCAnU2Vnb2UgVUkgU3ltYm9s
JywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsgZm9udC1z
aXplOiAxM3B4OyBsaW5lLWhlaWdodDogMTguODUwMDAwMzgxNDY5N3B4OyI+SW5zaWRlIHRoZSBN
U1ZDIENSVCBDIGhlYWRlcnMsJm5ic3A7PHR0IGNsYXNzPSJyZW1hcmt1cC1tb25vc3BhY2VkIiBz
dHlsZT0iY29sb3I6IHJnYig1MSwgNTEsIDUxKTsgcGFkZGluZzogMHB4IDRweDsgd2hpdGUtc3Bh
Y2U6IHByZS13cmFwOyBiYWNrZ3JvdW5kOiByZ2IoMjM1LCAyMzUsIDIzNSk7Ij5mbW9kZihmMzIp
PC90dD4mbmJzcDtpcyBkZWZpbmVkIGFzIGFuIGlubGluZTxicj5mdW5jdGlvbiB3aGljaCBjYXN0
cyB0aGUgZjMyIGludG8gYW4gZjY0IGFuZCBjYWxscyZuYnNwOzx0dCBjbGFzcz0icmVtYXJrdXAt
bW9ub3NwYWNlZCIgc3R5bGU9ImNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7IHBhZGRpbmc6IDBweCA0
cHg7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsgYmFja2dyb3VuZDogcmdiKDIzNSwgMjM1LCAyMzUp
OyI+Zm1vZChmNjQpPC90dD4sPGJyPmNhc3RpbmcgdGhlIHJlc3VsdCBiYWNrLiBUaGUmbmJzcDs8
dHQgY2xhc3M9InJlbWFya3VwLW1vbm9zcGFjZWQiIHN0eWxlPSJjb2xvcjogcmdiKDUxLCA1MSwg
NTEpOyBwYWRkaW5nOiAwcHggNHB4OyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IGJhY2tncm91bmQ6
IHJnYigyMzUsIDIzNSwgMjM1KTsiPmZtb2RmPC90dD4mbmJzcDtmdW5jdGlvbiBpcyBuZXZlciBl
bWl0dGVkIGludG8gdGhlPGJyPkNSVCBsaWIuPC9wPjxwIHN0eWxlPSJtYXJnaW46IDBweCAwcHgg
MTJweDsgcGFkZGluZzogMHB4OyBib3JkZXI6IDBweDsgY29sb3I6IHJnYigwLCAwLCAwKTsgZm9u
dC1mYW1pbHk6ICdTZWdvZSBVSScsICdTZWdvZSBVSSBXZWIgUmVndWxhcicsICdTZWdvZSBVSSBT
eW1ib2wnLCAnSGVsdmV0aWNhIE5ldWUnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOyBm
b250LXNpemU6IDEzcHg7IGxpbmUtaGVpZ2h0OiAxOC44NTAwMDAzODE0Njk3cHg7Ij5UaGlzIHBh
dGNoIGZpeGVzIHRoaXMgYnkgaW5zdGVhZCBwcm9tb3RpbmcgYSAzMi1iaXQgRlJFTSBpbnRvIGEg
NjQtYml0PGJyPkZSRU0sIGJ1dCBvbmx5IG9uIGEgMzItYml0IE1TVkMgdGFyZ2V0LjwvcD48cCBz
dHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweDsgYm9yZGVyOiAwcHg7IGNvbG9yOiByZ2Io
MCwgMCwgMCk7IGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCAnU2Vnb2UgVUkgV2ViIFJlZ3VsYXIn
LCAnU2Vnb2UgVUkgU3ltYm9sJywgJ0hlbHZldGljYSBOZXVlJywgSGVsdmV0aWNhLCBBcmlhbCwg
c2Fucy1zZXJpZjsgZm9udC1zaXplOiAxM3B4OyBsaW5lLWhlaWdodDogMTguODUwMDAwMzgxNDY5
N3B4OyI+VGhpcyBmaXhlcyBhbiZuYnNwOzx0dCBjbGFzcz0icmVtYXJrdXAtbW9ub3NwYWNlZCIg
c3R5bGU9ImNvbG9yOiByZ2IoNTEsIDUxLCA1MSk7IHBhZGRpbmc6IDBweCA0cHg7IHdoaXRlLXNw
YWNlOiBwcmUtd3JhcDsgYmFja2dyb3VuZDogcmdiKDIzNSwgMjM1LCAyMzUpOyI+dW5kZWZpbmVk
IHN5bWJvbDogZm1vZGY8L3R0PiZuYnNwO2Vycm9yIHdoZW4gbGlua2luZyBvbiAzMi1iaXQ8YnI+
V2luZG93cy48L3A+PHAgc3R5bGU9Im1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IGJvcmRlcjog
MHB4OyBjb2xvcjogcmdiKDAsIDAsIDApOyBmb250LWZhbWlseTogJ1NlZ29lIFVJJywgJ1NlZ29l
IFVJIFdlYiBSZWd1bGFyJywgJ1NlZ29lIFVJIFN5bWJvbCcsICdIZWx2ZXRpY2EgTmV1ZScsIEhl
bHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMTNweDsgbGluZS1oZWlnaHQ6
IDE4Ljg1MDAwMDM4MTQ2OTdweDsiPmBgYDwvcD48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>