Hi!
This patch mentions __builtin_*_overflow in gcc-5/changes.html.
Ok for CVS?
--- gcc-5/changes.html 27 Oct 2014 18:05:26 -0000 1.20
+++ gcc-5/changes.html 12 Nov 2014 13:09:01 -0000
@@ -84,7 +84,36 @@
of the standard directive <code>#include</code>
and the extension <code>#include_next</code> respectively.
</li>
-
+ <li>A new set of built-in functions for arithmetics with overflow checking
+ has been added: <code>__builtin_add_overflow</code>,
+ <code>__builtin_sub_overflow</code> and
<code>__builtin_mul_overflow</code>
+ and for compatibility with clang also other variants.
+ These builtins have two integral arguments (which don't need to have
+ the same type), the arguments are extended to infinite precision
+ signed type, <code>+</code>, <code>-</code> or <code>*</code>
+ is performed on those and the result is stored into some integer
+ variable pointed by the last argument. If the stored value is equal
+ to the infinite precision result, the built-in functions return
+ <code>false</code>, otherwise <code>true</code>. The type of
+ the integer variable that will hold the result can be different from
+ the types of arguments. The following snippet demonstrates how
+ this can be used in computing the size for the <code>calloc</code>
+ function:
+<blockquote><pre>
+void *
+calloc (size_t x, size_t y)
+{
+ size_t sz;
+ if (__builtin_mul_overflow (x, y, &sz)
+ return NULL;
+ void *ret = malloc (sz);
+ if (ret) memset (res, 0, sz);
+ return ret;
+}
+</pre></blockquote>
+ On e.g. i?86 or x86-64 the above will result in <code>mul</code>
+ instruction followed by jump on overflow.
+ </li>
</ul>
<h3 id="c">C</h3>
Jakub