summaryrefslogtreecommitdiff
path: root/erts/emulator/beam/erl_gc.c
diff options
context:
space:
mode:
authorJohn Högberg <john@erlang.org>2021-08-10 11:48:09 +0200
committerJohn Högberg <john@erlang.org>2021-08-10 15:34:54 +0200
commit8bad4b44185d47d9ac8243ade693402c18817628 (patch)
tree76ab350c785f5e26b4eaf0ee844c03eda512afaf /erts/emulator/beam/erl_gc.c
parent9d2d4e23cf1425ff8bf875ef80b0561c66708d95 (diff)
downloaderlang-8bad4b44185d47d9ac8243ade693402c18817628.tar.gz
erts: Fix stack validation when frame pointers are enabled
Diffstat (limited to 'erts/emulator/beam/erl_gc.c')
-rw-r--r--erts/emulator/beam/erl_gc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/erts/emulator/beam/erl_gc.c b/erts/emulator/beam/erl_gc.c
index eae8d7d5d2..596ce8bfb9 100644
--- a/erts/emulator/beam/erl_gc.c
+++ b/erts/emulator/beam/erl_gc.c
@@ -3738,8 +3738,10 @@ void erts_validate_stack(Process *p, Eterm *frame_ptr, Eterm *stack_top) {
return;
}
- ASSERT(next_fp);
- do {
+ /* We must have a frame pointer or an empty stack, but not both. */
+ ASSERT((next_fp != NULL) ^ (stack_top == stack_bottom));
+
+ while (next_fp) {
ASSERT(next_fp >= stack_top && next_fp <= stack_bottom);
/* We may not skip any frames. */
@@ -3765,7 +3767,7 @@ void erts_validate_stack(Process *p, Eterm *frame_ptr, Eterm *stack_top) {
}
scanner += CP_SIZE;
- } while(next_fp);
+ }
}
#endif