diff options
Diffstat (limited to 'erts')
-rw-r--r-- | erts/emulator/beam/bs_instrs.tab | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/erts/emulator/beam/bs_instrs.tab b/erts/emulator/beam/bs_instrs.tab index 10f43cd786..493ec10222 100644 --- a/erts/emulator/beam/bs_instrs.tab +++ b/erts/emulator/beam/bs_instrs.tab @@ -23,10 +23,17 @@ BS_SAFE_MUL(A, B, Fail, Dst) { Uint a = $A; Uint b = $B; - Uint res = a * b; + Uint res; +#ifdef HAVE_OVERFLOW_CHECK_BUILTINS + if (__builtin_mul_overflow(a, b, &res)) { + $Fail; + } +#else + res = a * b; if (res / b != a) { $Fail; } +#endif $Dst = res; } |