はじめに ZACKYこと山崎進です。 整数の加減乗算のオーバーフローを検出する方法がわかりましたので,報告します。 「ZEAM開発ログ 目次」はこちら 整数のオーバーフローを検出する方法 __builtin_*_overflow という関数を使います。 符号付き64ビット整数だったら,__builtin_saddl_overflow になります。 ドキュメントはこちら。 Clang Language Extensions — Clang 4 documentation C言語のコードはこんな感じです。 static ERL_NIF_TERM asm_1_nif_ii(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { long a, b; if(__builtin_expect((enif_get_int64(env, argv[0
![ZEAM開発ログ v.0.4.3 型多相かつ型安全なNIFでオーバーフローを検出する - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/1a8efee61a9cd8aa64f281e02806714a58625247/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9WkVBTSVFOSU5NiU4QiVFNyU5OSVCQSVFMyU4MyVBRCVFMyU4MiVCMCUyMHYuMC40LjMlMjAlRTUlOUUlOEIlRTUlQTQlOUElRTclOUIlQjglRTMlODElOEIlRTMlODElQTQlRTUlOUUlOEIlRTUlQUUlODklRTUlODUlQTglRTMlODElQUFOSUYlRTMlODElQTclRTMlODIlQUElRTMlODMlQkMlRTMlODMlOTAlRTMlODMlQkMlRTMlODMlOTUlRTMlODMlQUQlRTMlODMlQkMlRTMlODIlOTIlRTYlQTQlOUMlRTUlODclQkElRTMlODElOTklRTMlODIlOEImdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtY2xpcD1lbGxpcHNpcyZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTI4YzVjYWIwMzE2Y2E4NTcwNjEwMGQ1ZTNjOTMxMTkx%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwemFja3kxOTcyJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0wZmFhOTBiYjI5MDM3MzNlYTJiNDk1YzI3ZTgzMzFhNQ%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D992421955a22fc84cd2b901ba25f8fec)