+#endif /* __has_builtin(...) */
+
+/* os_add3_overflow(a, b, c) -> (a + b + c) */
+#define os_add3_overflow(a, b, c, res) __os_warn_unused(__extension__({ \
+ __typeof(*(res)) _tmp; \
+ bool _s, _t; \
+ _s = os_add_overflow((a), (b), &_tmp); \
+ _t = os_add_overflow((c), _tmp, (res)); \
+ _s | _t; \
+}))
+
+/* os_add_and_mul_overflow(a, b, x) -> (a + b)*x */
+#define os_add_and_mul_overflow(a, b, x, res) __os_warn_unused(__extension__({ \
+ __typeof(*(res)) _tmp; \
+ bool _s, _t; \
+ _s = os_add_overflow((a), (b), &_tmp); \
+ _t = os_mul_overflow((x), _tmp, (res)); \
+ _s | _t; \
+}))
+
+/* os_mul_and_add_overflow(a, x, b) -> a*x + b */
+#define os_mul_and_add_overflow(a, x, b, res) __os_warn_unused(__extension__({ \
+ __typeof(*(res)) _tmp; \
+ bool _s, _t; \
+ _s = os_mul_overflow((a), (x), &_tmp); \
+ _t = os_add_overflow((b), _tmp, (res)); \
+ _s | _t; \
+}))
+