From 84adefa331c4159d432d22840663c38f155cd4c1 Mon Sep 17 00:00:00 2001 From: Erlang/OTP Date: Fri, 20 Nov 2009 14:54:40 +0000 Subject: The R13B03 release. --- .../no_exception_in_catch.S | 209 +++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S (limited to 'lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S') 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 new file mode 100644 index 0000000000..e08a718a39 --- /dev/null +++ b/lib/compiler/test/beam_validator_SUITE_data/no_exception_in_catch.S @@ -0,0 +1,209 @@ +{module, no_exception_in_catch}. %% version = 0 + +{exports, [{foo,1},{module_info,0},{module_info,1},{nested_of_1,4}]}. + +{attributes, []}. + +{labels, 22}. + + +{function, nested_of_1, 4, 2}. + {label,1}. + {func_info,{atom,no_exception_in_catch},{atom,nested_of_1},4}. + {label,2}. + {test,is_tuple,{f,1},[{x,0}]}. + {test,test_arity,{f,1},[{x,0},3]}. + {allocate_zero,15,4}. + {get_tuple_element,{x,0},0,{y,9}}. + {get_tuple_element,{x,0},1,{y,10}}. + {get_tuple_element,{x,0},2,{y,11}}. + {move,{x,3},{y,14}}. + {move,{x,2},{y,13}}. + {move,{x,1},{y,12}}. + {move,{atom,nested3},{x,0}}. + {call_ext,1,{extfunc,erlang,erase,1}}. + {move,{atom,nested4},{x,0}}. + {call_ext,1,{extfunc,erlang,erase,1}}. + {move,{atom,nested},{x,0}}. + {call_ext,1,{extfunc,erlang,erase,1}}. + {bif,self,nofail,[],{x,0}}. + {'try',{y,8},{f,13}}. + {'try',{y,7},{f,11}}. + {'try',{y,6},{f,9}}. + {'try',{y,5},{f,7}}. +%% Because the following instructions can't possible throw an exception, +%% label 7 used to get no state. Now the try_end itself will save the state. + {move,{x,0},{y,4}}. + {bif,self,nofail,[],{x,0}}. + {'%live',1}. + {try_end,{y,5}}. + {test,is_eq_exact,{f,15},[{x,0},{y,4}]}. + {'try',{y,5},{f,6}}. + {'try',{y,3},{f,3}}. + {move,{y,9},{x,0}}. + {call,1,{f,17}}. + {try_end,{y,3}}. + {test,is_eq_exact,{f,15},[{x,0},{y,11}]}. + {move,{y,12},{x,0}}. + {call,1,{f,17}}. + {test_heap,3,1}. + {put_tuple,2,{x,1}}. + {put,{atom,value1}}. + {put,{x,0}}. + {move,{x,1},{x,0}}. + {jump,{f,5}}. + {label,3}. + {try_case,{y,3}}. + {move,{x,1},{y,1}}. + {move,{x,0},{y,2}}. + {move,{x,2},{y,3}}. + {bif,'=:=',{f,4},[{x,0},{y,10}],{x,3}}. + {move,{x,3},{y,0}}. + {bif,'=:=',{f,4},[{x,1},{y,11}],{x,4}}. + {bif,'and',{f,4},[{x,3},{x,4}],{x,3}}. + {test,is_eq_exact,{f,4},[{x,3},{atom,true}]}. + {kill,{y,0}}. + {kill,{y,1}}. + {kill,{y,2}}. + {kill,{y,3}}. + {move,{y,12},{x,0}}. + {call,1,{f,17}}. + {test_heap,3,1}. + {put_tuple,2,{x,1}}. + {put,{atom,caught1}}. + {put,{x,0}}. + {move,{x,1},{x,0}}. + {jump,{f,5}}. + {label,4}. + {bif,raise,{f,0},[{x,2},{x,1}],{x,0}}. + {'%live',1}. + {label,5}. + {try_end,{y,5}}. + {move,{x,0},{y,5}}. + {move,{y,13},{x,0}}. + {call,1,{f,17}}. + {move,{x,0},{x,1}}. + {move,{atom,nested3},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {move,{y,5},{x,0}}. + {jump,{f,8}}. + {label,6}. + {try_case,{y,5}}. + {move,{x,2},{y,5}}. + {move,{x,1},{y,3}}. + {move,{y,13},{x,0}}. + {call,1,{f,17}}. + {move,{x,0},{x,1}}. + {move,{atom,nested3},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {bif,raise,{f,0},[{y,5},{y,3}],{x,0}}. + {'%live',1}. + {jump,{f,8}}. + {label,7}. +%% The instructions here used to be not checked. + {move,{x,3},{x,0}}. + {try_case,{y,5}}. + {bif,raise,{f,0},[{x,2},{x,1}],{x,0}}. + {'%live',1}. + {label,8}. + {try_end,{y,6}}. + {move,{x,0},{y,13}}. + {kill,{y,3}}. + {kill,{y,4}}. + {kill,{y,5}}. + {kill,{y,9}}. + {kill,{y,10}}. + {kill,{y,11}}. + {kill,{y,12}}. + {move,{y,14},{x,0}}. + {call,1,{f,17}}. + {move,{x,0},{x,1}}. + {move,{atom,nested4},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {move,{y,13},{x,0}}. + {jump,{f,10}}. + {label,9}. + {try_case,{y,6}}. + {move,{x,2},{y,13}}. + {move,{x,1},{y,12}}. + {kill,{y,3}}. + {kill,{y,4}}. + {kill,{y,5}}. + {kill,{y,9}}. + {kill,{y,10}}. + {kill,{y,11}}. + {move,{y,14},{x,0}}. + {call,1,{f,17}}. + {move,{x,0},{x,1}}. + {move,{atom,nested4},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {bif,raise,{f,0},[{y,13},{y,12}],{x,0}}. + {'%live',1}. + {label,10}. + {try_end,{y,7}}. + {test_heap,3,1}. + {put_tuple,2,{x,1}}. + {put,{atom,value}}. + {put,{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}}. + {'%live',1}. + {label,12}. + {try_end,{y,8}}. + {move,{x,0},{y,14}}. + {move,{atom,finalized},{x,1}}. + {kill,{y,12}}. + {kill,{y,13}}. + {move,{atom,nested},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {move,{y,14},{x,0}}. + {jump,{f,14}}. + {label,13}. + {try_case,{y,8}}. + {move,{x,2},{y,14}}. + {move,{x,1},{y,13}}. + {move,{atom,finalized},{x,1}}. + {kill,{y,12}}. + {move,{atom,nested},{x,0}}. + {call_ext,2,{extfunc,erlang,put,2}}. + {bif,raise,{f,0},[{y,14},{y,13}],{x,0}}. + {'%live',1}. + {label,14}. + {move,{x,0},{y,14}}. + {kill,{y,13}}. + {move,{atom,nested3},{x,0}}. + {call_ext,1,{extfunc,erlang,erase,1}}. + {move,{x,0},{y,13}}. + {move,{atom,nested4},{x,0}}. + {call_ext,1,{extfunc,erlang,erase,1}}. + {move,{x,0},{y,12}}. + {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}}. + {move,{x,1},{x,0}}. + {deallocate,15}. + return. + {label,15}. + {try_case_end,{x,0}}. + + +{function, foo, 1, 17}. + {label,16}. + {func_info,{atom,no_exception_in_catch},{atom,foo},1}. + {label,17}. + {move,{atom,ok},{x,0}}. + return. -- cgit v1.2.3