summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjörn Gustavsson <bjorn@erlang.org>2021-10-15 05:07:18 +0200
committerBjörn Gustavsson <bjorn@erlang.org>2021-10-15 05:07:18 +0200
commit1da312e1dae516d04ef100fa9f5bd37c6b8966af (patch)
treedd768413c58be92d40b2c59f6e8a140f6e835d97
parent08f397986125047900a18275cc04a8c440f1c5ce (diff)
downloaderlang-1da312e1dae516d04ef100fa9f5bd37c6b8966af.tar.gz
wip
-rw-r--r--erts/emulator/beam/emu/beam_emu.c7
-rw-r--r--erts/emulator/beam/emu/bs_instrs.tab8
2 files changed, 8 insertions, 7 deletions
diff --git a/erts/emulator/beam/emu/beam_emu.c b/erts/emulator/beam/emu/beam_emu.c
index ec71dd2088..dd35859559 100644
--- a/erts/emulator/beam/emu/beam_emu.c
+++ b/erts/emulator/beam/emu/beam_emu.c
@@ -717,7 +717,7 @@ erts_beam_jump_table(void)
void
erts_prepare_bs_construct_fail_info(Process* c_p, const BeamInstr* p, Eterm reason, Eterm Info)
{
- Eterm* hp = HeapFragOnlyAlloc(c_p, MAP3_SZ+3+1);
+ Eterm* hp;
Eterm cause_tuple;
Eterm op;
Eterm error_info;
@@ -758,8 +758,9 @@ erts_prepare_bs_construct_fail_info(Process* c_p, const BeamInstr* p, Eterm reas
break;
}
- cause_tuple = TUPLE3(hp, make_small(segment), op, Info);
- hp += 4;
+ hp = HeapFragOnlyAlloc(c_p, MAP3_SZ+4+1);
+ cause_tuple = TUPLE4(hp, make_small(segment), op, Info, NIL);
+ hp += 5;
error_info = MAP3(hp,
am_cause, cause_tuple,
am_function, am_format_bs_fail,
diff --git a/erts/emulator/beam/emu/bs_instrs.tab b/erts/emulator/beam/emu/bs_instrs.tab
index bcd46052af..5202096f9c 100644
--- a/erts/emulator/beam/emu/bs_instrs.tab
+++ b/erts/emulator/beam/emu/bs_instrs.tab
@@ -333,13 +333,13 @@ i_new_bs_put_float(Fail, Sz, Flags, Src) {
Eterm flags = $Flags;
Sint _size;
$BS_GET_UNCHECKED_FIELD_SIZE(sz, (flags >> 3), $BADARG($Fail), _size);
- if (!erts_new_bs_put_float(c_p, ($Src), _size, flags)) {
+ if (is_value(erts_new_bs_put_float(c_p, ($Src), _size, flags))) {
$BADARG($Fail);
}
}
i_new_bs_put_float_imm(Fail, Sz, Flags, Src) {
- if (!erts_new_bs_put_float(c_p, ($Src), ($Sz), ($Flags))) {
+ if (is_value(erts_new_bs_put_float(c_p, ($Src), ($Sz), ($Flags)))) {
$BADARG($Fail);
}
}
@@ -1211,14 +1211,14 @@ i_bs_create_bin(Fail, Alloc, Live, Dst, N) {
$BS_LOAD_FLAGS(p, flags);
$BS_LOAD_SIZE(p, Size);
$BS_GET_UNCHECKED_FIELD_SIZE(Size, unit, $BADARG($Fail), _size);
- if (!erts_new_bs_put_float(c_p, Src, _size, flags)) {
+ if (is_value(erts_new_bs_put_float(c_p, Src, _size, flags))) {
$BS_FAIL_INFO($Fail, BADARG, c_p->fvalue);
}
break;
case BSC_FLOAT_FIXED_SIZE:
$BS_LOAD_FLAGS(p, flags);
$BS_LOAD_FIXED_SIZE(p, Size);
- if (!erts_new_bs_put_float(c_p, Src, Size, flags)) {
+ if (is_value(erts_new_bs_put_float(c_p, Src, Size, flags))) {
$BS_FAIL_INFO($Fail, BADARG, c_p->fvalue);
}
break;