<div dir="ltr">On Tue, Jun 18, 2013 at 3:11 PM, Michael Gottesman <span dir="ltr"><<a href="mailto:mgottesman@apple.com" target="_blank">mgottesman@apple.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<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">Hello cfe commits!<br>
<br>
The attached patch adds checked-arithmetic builtins to ameliorate such code in security critical applications (for instance webkit). It simply exposes {u,s}{add,sub,mul}.<br>
<br>
*NOTE* The u{add,sub} overlaps with the multi precision built-ins. I decided to add in the additional builtin since users are going to see s{add,sub} and look for u{add,sub}. We could add in a Builtins.h header where I could implement the checked arithmetic with the multi precision arithmetic builtins but I felt that was a bigger change than this.<br>
<br></blockquote><div><br></div><div>It looks like you copy-pasted some stuff you didn't mean to in the changes to LanguageExtensions.rst.</div><div><br></div></div></div><div class="gmail_extra"><div class="gmail_extra">
+    return RValue::get(Builder.CreateZExt(Carry, X->getType()));</div><div><br></div><div>These builtins all return bool, right?  Why are you zero-extending here?  (You might be able to get away with this in C because of integer promotions, but I'm pretty sure it'll explode in C++.)</div>
<div><br></div><div>IIRC, we don't actually support CodeGen of llvm.smul.with.overflow with 64-bit operands on x86-32; it would be nice to print a proper error message instead of crashing.  (At least, we didn't at one point; I don't recall if it ever got fixed.)</div>
<div><br></div><div>-Eli</div></div></div>