HiPE bug with nested try/catch

Trap Exit <>
Fri Jul 21 10:09:03 CEST 2006


According to the Erlang ref. manual: 
Quote:
If an exception occurs during evaluation of Expr but there is no matching ExceptionPattern of the right Class with a true guard sequence, the exception is passed on as if Expr had not been enclosed in a try expression.
(end of quote)


So I constructed the following example and noticed that it behaved differently when HiPE compiled.


-module&#40;trycatch&#41;.

-export&#40;&#91;main/0&#93;&#41;.

main&#40;&#41; ->
&nbsp; &nbsp; try
&nbsp; &nbsp; &nbsp; &nbsp; f&#40;&#41;
&nbsp; &nbsp; catch
&nbsp; &nbsp; &nbsp; &nbsp; throw&#58;Throw ->
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; io&#58;format&#40;"gotcha&#58; ~p~n", &#91;Throw&#93;&#41;
&nbsp; &nbsp; end.

f&#40;&#41; ->
&nbsp; &nbsp; try
&nbsp; &nbsp; &nbsp; &nbsp; throw&#40;'i.wonder.who.will.catch.me'&#41;
&nbsp; &nbsp; catch
&nbsp; &nbsp; &nbsp; &nbsp; error&#58;Error ->
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; io&#58;format&#40;"function f caused an error&#58; ~p~n", &#91;Error&#93;&#41;
&nbsp; &nbsp; end.



Erlang &#40;BEAM&#41; emulator version 5.5 &#91;source&#93; &#91;async-threads&#58;0&#93; &#91;hipe&#93;

Eshell V5.5&nbsp; &#40;abort with ^G&#41;
1> c&#40;trycatch&#41;.
&#123;ok,trycatch&#125;
2> trycatch&#58;main&#40;&#41;.
gotcha&#58; 'i.wonder.who.will.catch.me'
ok
3> c&#40;trycatch,native&#41;.
&#123;ok,trycatch&#125;
4> trycatch&#58;main&#40;&#41;.

=ERROR REPORT==== 21-Jul-2006&#58;&#58;09&#58;56&#58;33 ===
Error in process <0.32.0> with exit value&#58; &#123;undef,&#91;&#123;erlang,raise,&#91;&#91;&#91;&#123;erlang,raise,&#91;&#91;true|16#4044646A0000000000000000000000000000006A&#93;,'i.wonder.who.will.catch.me'&#93;&#125;,&#123;erl_eval,do_apply,5&#125;,&#123;shell,exprs,6&#125;,&#123;shell,eval_loop,3&#125;&#93;|-16#0000000000000000000000000010&#93;,undef&#93;&#125;,&#123;erl_eval,do_apply,5&#125;,&#123;shell,exprs,6&#125;,&#123;shell,eval_loop,3&#125;&#93;&#125;

** exited&#58; &#123;undef,&#91;&#123;erlang,raise,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#91;&#91;&#91;&#123;erlang,raise,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#91;&#91;true|
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 366900607304749881568687426529269484530033492074&#93;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'i.wonder.who.will.catch.me'&#93;&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;erl_eval,do_apply,5&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;shell,exprs,6&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#123;shell,eval_loop,3&#125;&#93;|
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-00000000000000000016&#93;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; undef&#93;&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#123;erl_eval,do_apply,5&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#123;shell,exprs,6&#125;,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#123;shell,eval_loop,3&#125;&#93;&#125; **

_________________________________________________________
Post sent from http://www.trapexit.org



More information about the erlang-bugs mailing list