diff options
author | Björn Gustavsson <bjorn@erlang.org> | 2023-04-28 13:19:04 +0200 |
---|---|---|
committer | Björn Gustavsson <bjorn@erlang.org> | 2023-04-28 13:34:27 +0200 |
commit | 16c2083c78a207f296918a831527e44b026c432d (patch) | |
tree | 154c73f31f7c75c598b41dce3bea6d4080f5cb74 | |
parent | 86e6ebf531e2bd6222a7a29a422b704cd10a88be (diff) | |
download | erlang-16c2083c78a207f296918a831527e44b026c432d.tar.gz |
Eliminate unsafe sharing optimization in beam_jump
Closes #7180
-rw-r--r-- | lib/compiler/src/beam_jump.erl | 1 | ||||
-rw-r--r-- | lib/compiler/test/beam_jump_SUITE.erl | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl index 90672bab7c..9ae5a33d74 100644 --- a/lib/compiler/src/beam_jump.erl +++ b/lib/compiler/src/beam_jump.erl @@ -464,6 +464,7 @@ add_scope([I|Is], Scope) -> [I|add_scope(Is, Scope)]; add_scope([], _Scope) -> []. +is_shareable([{badmatch,_}|_]) -> false; is_shareable([build_stacktrace|_]) -> false; is_shareable([{case_end,_}|_]) -> false; is_shareable([{'catch',_,_}|_]) -> false; diff --git a/lib/compiler/test/beam_jump_SUITE.erl b/lib/compiler/test/beam_jump_SUITE.erl index 713a1ea5ab..65fecd5b7c 100644 --- a/lib/compiler/test/beam_jump_SUITE.erl +++ b/lib/compiler/test/beam_jump_SUITE.erl @@ -82,6 +82,8 @@ ambiguous_catch_try_state(Config) -> {'EXIT',{{badmatch,0},_}} = (catch ambiguous_catch_try_state_2()), {'EXIT',{{badmatch,0},_}} = (catch ambiguous_catch_try_state_3()), + {'EXIT',{badarg,_}} = catch ambiguous_catch_try_state_4(), + ok. river() -> song. @@ -229,6 +231,12 @@ ambiguous_catch_try_state_3() -> end. +ambiguous_catch_try_state_4() -> + 0.0 = try binary_to_float(garbage_collect() orelse ((1.0 = tuple_to_list(ok)) -- ok)) + after + ok + end. + -record(message2, {id, p1}). -record(message3, {id, p1, p2}). |