diff options
author | John Högberg <john@erlang.org> | 2021-08-10 11:48:09 +0200 |
---|---|---|
committer | John Högberg <john@erlang.org> | 2021-08-10 15:34:54 +0200 |
commit | 8bad4b44185d47d9ac8243ade693402c18817628 (patch) | |
tree | 76ab350c785f5e26b4eaf0ee844c03eda512afaf /erts/emulator/beam/erl_gc.c | |
parent | 9d2d4e23cf1425ff8bf875ef80b0561c66708d95 (diff) | |
download | erlang-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.c | 8 |
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 |