Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang:25
erlang
0197-Fix-unsafe-optimization-of-try.after.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0197-Fix-unsafe-optimization-of-try.after.patch of Package erlang
From 34ee7d1b0becdcf324db2a9e2ef24750b16021f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Fri, 13 Jan 2023 05:21:34 +0100 Subject: [PATCH] Fix unsafe optimization of try...after Closes #6660 --- lib/compiler/src/beam_ssa_opt.erl | 8 +++++++- lib/compiler/test/bs_match_SUITE.erl | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/compiler/src/beam_ssa_opt.erl b/lib/compiler/src/beam_ssa_opt.erl index 24a6465078..ad8db602d2 100644 --- a/lib/compiler/src/beam_ssa_opt.erl +++ b/lib/compiler/src/beam_ssa_opt.erl @@ -1654,13 +1654,19 @@ sink_try_is(Is) -> sink_try_is_1([#b_set{op=kill_try_tag}=Kill | Is], Acc) -> [Kill | reverse(Acc, Is)]; sink_try_is_1([I | Is], Acc) -> - case beam_ssa:no_side_effect(I) of + case is_safe_sink_try(I) of true -> sink_try_is_1(Is, [I | Acc]); false -> reverse(Acc, [I | Is]) end; sink_try_is_1([], Acc) -> reverse(Acc). +is_safe_sink_try(#b_set{op=Op}=I) -> + case Op of + bs_extract -> false; + _ -> beam_ssa:no_side_effect(I) + end. + %% Does a strength reduction of try/catch and catch. %% %% In try/catch constructs where the expression is restricted -- 2.35.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor