diff options
author | Magnus Lång <[email protected]> | 2015-10-23 15:31:28 +0200 |
---|---|---|
committer | Magnus Lång <[email protected]> | 2015-11-27 18:18:37 +0100 |
commit | fd21382290333e6cc25728c1b6dd7c211ddfc297 (patch) | |
tree | e4a2056c903b510c396923574ab5a885fff3e4bd /erts/emulator/hipe/hipe_native_bif.c | |
parent | 6af385b22805cc2e8cee5c0a5f3506361afbe961 (diff) | |
download | otp-fd21382290333e6cc25728c1b6dd7c211ddfc297.tar.gz otp-fd21382290333e6cc25728c1b6dd7c211ddfc297.tar.bz2 otp-fd21382290333e6cc25728c1b6dd7c211ddfc297.zip |
hipe: test unit size match in bs_append
This feature was previously missing and expressions such as
<<<<1:1>>/binary>> would succeed construction when compiled with HiPE.
A primop is_divisible is introduced to handle the case when the unit
size is not a power of two.
Diffstat (limited to 'erts/emulator/hipe/hipe_native_bif.c')
-rw-r--r-- | erts/emulator/hipe/hipe_native_bif.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/erts/emulator/hipe/hipe_native_bif.c b/erts/emulator/hipe/hipe_native_bif.c index 688378b2fe..119b0b0895 100644 --- a/erts/emulator/hipe/hipe_native_bif.c +++ b/erts/emulator/hipe/hipe_native_bif.c @@ -504,6 +504,18 @@ int hipe_bs_validate_unicode_retract(ErlBinMatchBuffer* mb, Eterm arg) return 1; } +BIF_RETTYPE hipe_is_divisible(BIF_ALIST_2) +{ + /* Arguments are Eterm-sized unsigned integers */ + Uint dividend = BIF_ARG_1; + Uint divisor = BIF_ARG_2; + if (dividend % divisor) { + BIF_ERROR(BIF_P, BADARG); + } else { + return NIL; + } +} + /* This is like the loop_rec_fr BEAM instruction */ Eterm hipe_check_get_msg(Process *c_p) |