diff options
author | Björn Gustavsson <[email protected]> | 2017-08-10 11:46:48 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2017-08-11 13:44:47 +0200 |
commit | 8c0569d2b5c26545cb7abd9063a1abda7ebd13e9 (patch) | |
tree | f642c3dbed4f45c217d7312888cfba08b4fd254e /erts/emulator/beam/erl_arith.c | |
parent | 81a6adab693a75f89bc87911ac23a21308673d2d (diff) | |
download | otp-8c0569d2b5c26545cb7abd9063a1abda7ebd13e9.tar.gz otp-8c0569d2b5c26545cb7abd9063a1abda7ebd13e9.tar.bz2 otp-8c0569d2b5c26545cb7abd9063a1abda7ebd13e9.zip |
Make '0 bsl BigNumber' consistently succeed
'0 bsl 134217728' would fail with a system limit exception on a 32-bit
BEAM machine, but not on a 64-bit BEAM machine. Smaller values
on the right would always work.
Make erlang:bsl(0, BigNumber) always return 0 to make for consistency.
(The previous commit accidentally did that change for
'0 bsl BigNumber'.)
Diffstat (limited to 'erts/emulator/beam/erl_arith.c')
-rw-r--r-- | erts/emulator/beam/erl_arith.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/erts/emulator/beam/erl_arith.c b/erts/emulator/beam/erl_arith.c index 861532f241..f2a3e411ec 100644 --- a/erts/emulator/beam/erl_arith.c +++ b/erts/emulator/beam/erl_arith.c @@ -276,8 +276,12 @@ shift(Process* p, Eterm arg1, Eterm arg2, int right) goto do_bsl; } else if (is_small(arg1) || is_big(arg1)) { /* - * N bsl PositiveBigNum is too large to represent. + * N bsl PositiveBigNum is too large to represent, + * unless N is 0. */ + if (arg1 == make_small(0)) { + BIF_RET(arg1); + } BIF_ERROR(p, SYSTEM_LIMIT); } /* Fall through if the left argument is not an integer. */ |