Skip to content

Commit da60352

Browse files
committed
Merge branch 'isabell/compiler/tuple_inplace_fix/ERIERL-1208/OTP-19561' into maint
* isabell/compiler/tuple_inplace_fix/ERIERL-1208/OTP-19561: compiler destructive update: Fix bug in nested patches
2 parents 5a630bb + 0e76979 commit da60352

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

lib/compiler/src/beam_ssa_destructive_update.erl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -798,6 +798,8 @@ aggregate_ret_patches([R={self,heap_tuple}]) ->
798798
R;
799799
aggregate_ret_patches([R={self,init_writable}]) ->
800800
R;
801+
aggregate_ret_patches([{tuple_element,I,_,_}=A, {tuple_element,I,_,_}=B|Rest]) ->
802+
aggregate_ret_patches([merge_patches(A, B)|Rest]);
801803
aggregate_ret_patches([{tuple_element,I,E,_}|Rest]) ->
802804
Elements = [{I,E}|aggregate_ret_patches_tuple(Rest)],
803805
{tuple_elements,Elements};

lib/compiler/test/beam_ssa_check_SUITE_data/tuple_inplace_checks.erl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
-export([do0a/0, do0b/2, different_sizes/2, ambiguous_inits/1,
2424
update_record0/0, fc/0, track_update_record/1,
2525
gh8124_a/0, gh8124_b/0,
26-
failure_to_patch_list/0]).
26+
failure_to_patch_list/0, erierl1208/0]).
2727

2828
-record(r, {a=0,b=0,c=0,tot=0}).
2929
-record(r1, {a}).
3030
-record(r2, {b}).
31+
-record(r3, {c}).
3132

3233
do0a() ->
3334
Ls = ex:f(),
@@ -237,6 +238,17 @@ gh8124_b() ->
237238
[R] = gh8124_b_inner(),
238239
R#r{a = <<"value 2">>}.
239240

241+
erierl1208_inner() ->
242+
%ssa% () when post_ssa_opt ->
243+
%ssa% R3 = put_tuple(r3, _),
244+
%ssa% R2 = put_tuple(r2, R3),
245+
%ssa% R1 = put_tuple(r1, R2),
246+
%ssa% ret(R1).
247+
#r1{a = #r2{b = #r3{c = <<"value1">>}}}.
248+
249+
erierl1208() ->
250+
R1 = #r1{a=A=#r2{b=B}} = erierl1208_inner(),
251+
R1#r1{a = A#r2{b= B#r3{c= <<"new value">>}}}.
240252

241253
%% Check that the list of tuples is built on the heap.
242254

0 commit comments

Comments
 (0)