Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:Ledest:erlang
erlang
2271-beam_validator-No-longer-support-old-tuple...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 2271-beam_validator-No-longer-support-old-tuple-creation-.patch of Package erlang
From e455e719c54846f2f0f157b8585b1642e448ff69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= <bjorn@erlang.org> Date: Mon, 14 Nov 2022 06:54:42 +0100 Subject: [PATCH] beam_validator: No longer support old tuple creation instructions The last release that emitted the `put_tuple` and `put` instructions was OTP 21, which is no longer supported. --- lib/compiler/src/beam_validator.erl | 27 --------- lib/compiler/test/beam_validator_SUITE.erl | 15 ++--- .../beam_validator_SUITE_data/bad_tuples.S | 55 +------------------ .../no_exception_in_catch.S | 26 ++------- .../receive_stacked.S | 32 +++-------- 5 files changed, 22 insertions(+), 133 deletions(-) diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl index f98bbe894f..6d5964c1d1 100644 --- a/lib/compiler/src/beam_validator.erl +++ b/lib/compiler/src/beam_validator.erl @@ -630,33 +630,6 @@ vi({put_tuple2,Dst,{list,Elements}}, Vst0) -> end, {#{}, 1}, Elements), Type = #t_tuple{exact=true,size=Size,elements=Es}, create_term(Type, put_tuple2, [], Dst, Vst); -vi({put_tuple,Sz,Dst}, Vst0) when is_integer(Sz) -> - Vst1 = eat_heap(1, Vst0), - Vst = create_term(#t_abstract{kind=unfinished_tuple}, put_tuple, [], - Dst, Vst1), - #vst{current=St0} = Vst, - St = St0#st{puts_left={Sz,{Dst,Sz,#{}}}}, - Vst#vst{current=St}; -vi({put,Src}, Vst0) -> - assert_term(Src, Vst0), - Vst = eat_heap(1, Vst0), - #vst{current=St0} = Vst, - case St0 of - #st{puts_left=none} -> - error(not_building_a_tuple); - #st{puts_left={1,{Dst,Sz,Es0}}} -> - ElementType = get_term_type(Src, Vst0), - Es = beam_types:set_tuple_element(Sz, ElementType, Es0), - St = St0#st{puts_left=none}, - Type = #t_tuple{exact=true,size=Sz,elements=Es}, - create_term(Type, put_tuple, [], Dst, Vst#vst{current=St}); - #st{puts_left={PutsLeft,{Dst,Sz,Es0}}} when is_integer(PutsLeft) -> - Index = Sz - PutsLeft + 1, - ElementType = get_term_type(Src, Vst0), - Es = beam_types:set_tuple_element(Index, ElementType, Es0), - St = St0#st{puts_left={PutsLeft-1,{Dst,Sz,Es}}}, - Vst#vst{current=St} - end; vi({set_tuple_element,Src,Tuple,N}, Vst) -> %% This instruction never fails, though it may be invalid in some contexts; %% see validate_mutation/2 diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl index ee43c81a2f..b76426e596 100644 --- a/lib/compiler/test/beam_validator_SUITE.erl +++ b/lib/compiler/test/beam_validator_SUITE.erl @@ -321,7 +321,7 @@ state_after_fault_in_catch(Config) when is_list(Config) -> no_exception_in_catch(Config) when is_list(Config) -> Errors = do_val(no_exception_in_catch, Config), [{{no_exception_in_catch,nested_of_1,4}, - {{try_case_end,{x,0}},180,ambiguous_catch_try_state}}] = Errors, + {{try_case_end,{x,0}},166,ambiguous_catch_try_state}}] = Errors, ok. undef_label(Config) when is_list(Config) -> @@ -519,13 +519,8 @@ destroy_reg({Tag,N}) -> bad_tuples(Config) -> Errors = do_val(bad_tuples, Config), [{{bad_tuples,heap_overflow,1}, - {{put,{x,0}},9,{heap_overflow,{left,0},{wanted,1}}}}, - {{bad_tuples,long,2}, - {{put,{atom,too_long}},9,not_building_a_tuple}}, - {{bad_tuples,self_referential,1}, - {{put,{x,1}},8,{unfinished_tuple,{x,1}}}}, - {{bad_tuples,short,1}, - {{move,{x,1},{x,0}},8,{unfinished_tuple,{x,1}}}}] = Errors, + {{put_tuple2,{x,0},{list,[{atom,ok},{x,0}]}},6, + {heap_overflow,{left,2},{wanted,3}}}}] = Errors, ok. @@ -552,7 +547,7 @@ receive_stacked(Config) -> {{test_heap,3,0},11,{fragile_message_reference,{y,_}}}}, {{receive_stacked,f5,0}, {{loop_rec_end,{f,23}}, - 24, + 22, {fragile_message_reference,{y,_}}}}, {{receive_stacked,f6,0}, {{gc_bif,byte_size,{f,29},0,[{y,_}],{x,0}}, @@ -572,7 +567,7 @@ receive_stacked(Config) -> {fragile_message_reference,{y,_}}}}, {{receive_stacked,m2,0}, {{loop_rec_end,{f,48}}, - 34, + 32, {fragile_message_reference,{y,_}}}}] = Errors, %% Compile the original source code as a smoke test. diff --git a/lib/compiler/test/beam_validator_SUITE_data/bad_tuples.S b/lib/compiler/test/beam_validator_SUITE_data/bad_tuples.S index 7980241c37..81b52757b8 100644 --- a/lib/compiler/test/beam_validator_SUITE_data/bad_tuples.S +++ b/lib/compiler/test/beam_validator_SUITE_data/bad_tuples.S @@ -1,69 +1,20 @@ {module, bad_tuples}. %% version = 0 {exports, [{heap_overflow,1}, - {long,2}, {module_info,0}, - {module_info,1}, - {self_referential,1}, - {short,1}]}. + {module_info,1}]}. {attributes, []}. {labels, 13}. - -{function, short, 1, 2}. - {label,1}. - {line,[{location,"bad_tuples.erl",4}]}. - {func_info,{atom,bad_tuples},{atom,short},1}. - {label,2}. - {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,ok}}. - {move,{x,1},{x,0}}. - return. - - -{function, long, 2, 4}. - {label,3}. - {line,[{location,"bad_tuples.erl",7}]}. - {func_info,{atom,bad_tuples},{atom,long},2}. - {label,4}. - {test_heap,6,2}. - {put_tuple,2,{x,2}}. - {put,{x,0}}. - {put,{x,1}}. - {put,{atom,too_long}}. - {put_tuple,2,{x,0}}. - {put,{atom,ok}}. - {put,{x,2}}. - return. - - {function, heap_overflow, 1, 6}. {label,5}. {line,[{location,"bad_tuples.erl",10}]}. {func_info,{atom,bad_tuples},{atom,heap_overflow},1}. {label,6}. - {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,ok}}. - {put,{x,0}}. - {put,{x,0}}. - {move,{x,1},{x,0}}. - return. - - -{function, self_referential, 1, 8}. - {label,7}. - {line,[{location,"bad_tuples.erl",13}]}. - {func_info,{atom,bad_tuples},{atom,self_referential},1}. - {label,8}. - {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,ok}}. - {put,{x,1}}. - {move,{x,1},{x,0}}. + {test_heap,2,1}. + {put_tuple2,{x,0},{list,[{atom,ok},{x,0}]}}. return. diff --git a/lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S b/lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S index 1a5b417a5f..b6304d00cc 100644 --- a/lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S +++ b/lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S @@ -47,9 +47,7 @@ {move,{y,12},{x,0}}. {call,1,{f,17}}. {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,value1}}. - {put,{x,0}}. + {put_tuple2,{x,1},{list,[{atom,value1},{x,0}]}}. {move,{x,1},{x,0}}. {jump,{f,5}}. {label,3}. @@ -69,9 +67,7 @@ {move,{y,12},{x,0}}. {call,1,{f,17}}. {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,caught1}}. - {put,{x,0}}. + {put_tuple2,{x,1},{list,[{atom,caught1},{x,0}]}}. {move,{x,1},{x,0}}. {jump,{f,5}}. {label,4}. @@ -142,20 +138,14 @@ {label,10}. {try_end,{y,7}}. {test_heap,3,1}. - {put_tuple,2,{x,1}}. - {put,{atom,value}}. - {put,{x,0}}. + {put_tuple2,{x,1},{list,[{atom,value},{x,0}]}}. {move,{x,1},{x,0}}. {jump,{f,12}}. {label,11}. {try_case,{y,7}}. {test_heap,6,3}. - {put_tuple,2,{x,3}}. - {put,{x,0}}. - {put,{x,1}}. - {put_tuple,2,{x,0}}. - {put,{atom,caught}}. - {put,{x,3}}. + {put_tuple2,{x,3},{list,[{x,0},{x,1}]}}. + {put_tuple2,{x,0},{list,[{atom,caught},{x,3}]}}. {'%live',1}. {label,12}. {try_end,{y,8}}. @@ -189,11 +179,7 @@ {move,{atom,nested},{x,0}}. {call_ext,1,{extfunc,erlang,erase,1}}. {test_heap,5,1}. - {put_tuple,4,{x,1}}. - {put,{y,14}}. - {put,{y,13}}. - {put,{y,12}}. - {put,{x,0}}. + {put_tuple2,{x,1},{list,[{y,14},{y,13},{y,12},{x,0}]}}. {move,{x,1},{x,0}}. {deallocate,15}. return. diff --git a/lib/compiler/test/beam_validator_SUITE_data/receive_stacked.S b/lib/compiler/test/beam_validator_SUITE_data/receive_stacked.S index a878204d16..d4597f088e 100644 --- a/lib/compiler/test/beam_validator_SUITE_data/receive_stacked.S +++ b/lib/compiler/test/beam_validator_SUITE_data/receive_stacked.S @@ -55,16 +55,12 @@ {test,is_nil,{f,9},[{x,0}]}. {test_heap,3,0}. remove_message. - {put_tuple,2,{y,0}}. - {put,{atom,ok}}. - {put,{y,1}}. + {put_tuple2,{y,0},{list,[{atom,ok},{y,1}]}}. {move,{integer,42},{x,0}}. {line,[{location,"receive_stacked.erl",26}]}. {call,1,{f,52}}. {test_heap,3,0}. - {put_tuple,2,{x,0}}. - {put,{y,0}}. - {put,{y,1}}. + {put_tuple2,{x,0},{list,[{y,0},{y,1}]}}. {deallocate,2}. return. {label,9}. @@ -86,16 +82,12 @@ {test,is_integer,{f,14},[{y,1}]}. {test_heap,3,0}. remove_message. - {put_tuple,2,{y,0}}. - {put,{atom,ok}}. - {put,{y,1}}. + {put_tuple2,{y,0},{list,[{atom,ok},{y,1}]}}. {move,{integer,42},{x,0}}. {line,[{location,"receive_stacked.erl",34}]}. {call,1,{f,52}}. {test_heap,3,0}. - {put_tuple,2,{x,0}}. - {put,{y,0}}. - {put,{y,1}}. + {put_tuple2,{x,0},{list,[{y,0},{y,1}]}}. {deallocate,2}. return. {label,14}. @@ -117,16 +109,12 @@ {test,is_list,{f,19},[{y,1}]}. {test_heap,3,0}. remove_message. - {put_tuple,2,{y,0}}. - {put,{atom,ok}}. - {put,{y,1}}. + {put_tuple2,{y,0},{list,[{atom,ok},{y,1}]}}. {move,{integer,42},{x,0}}. {line,[{location,"receive_stacked.erl",42}]}. {call,1,{f,52}}. {test_heap,3,0}. - {put_tuple,2,{x,0}}. - {put,{y,0}}. - {put,{y,1}}. + {put_tuple2,{x,0},{list,[{y,0},{y,1}]}}. {deallocate,2}. return. {label,19}. @@ -153,9 +141,7 @@ {line,[{location,"receive_stacked.erl",50}]}. {call,1,{f,52}}. {test_heap,3,0}. - {put_tuple,2,{x,0}}. - {put,{y,0}}. - {put,{y,1}}. + {put_tuple2,{x,0},{list,[{y,0},{y,1}]}}. {deallocate,2}. return. {label,24}. @@ -350,9 +336,7 @@ {line,[{location,"receive_stacked.erl",87}]}. {call,1,{f,52}}. {test_heap,3,0}. - {put_tuple,2,{x,0}}. - {put,{y,1}}. - {put,{y,0}}. + {put_tuple2,{x,0},{list,[{y,1},{y,0}]}}. {deallocate,4}. return. {label,49}. -- 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