diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/stdlib/include/assert.hrl | 22 | ||||
| -rw-r--r-- | lib/stdlib/src/c.erl | 4 | ||||
| -rw-r--r-- | lib/stdlib/src/dets.erl | 12 | ||||
| -rw-r--r-- | lib/stdlib/src/dets_utils.erl | 3 | ||||
| -rw-r--r-- | lib/stdlib/src/escript.erl | 18 | ||||
| -rw-r--r-- | lib/stdlib/src/ets.erl | 8 | ||||
| -rw-r--r-- | lib/stdlib/src/file_sorter.erl | 8 | ||||
| -rw-r--r-- | lib/stdlib/src/gen_server.erl | 20 | ||||
| -rw-r--r-- | lib/stdlib/src/gen_statem.erl | 25 | ||||
| -rw-r--r-- | lib/stdlib/src/proc_lib.erl | 12 | ||||
| -rw-r--r-- | lib/stdlib/src/qlc.erl | 53 | ||||
| -rw-r--r-- | lib/stdlib/src/shell.erl | 7 | ||||
| -rw-r--r-- | lib/stdlib/src/zip.erl | 3 | ||||
| -rw-r--r-- | lib/stdlib/test/array_SUITE.erl | 8 | ||||
| -rw-r--r-- | lib/stdlib/test/error_logger_h_SUITE.erl | 3 | ||||
| -rw-r--r-- | lib/stdlib/test/gen_statem_SUITE.erl | 4 | ||||
| -rw-r--r-- | lib/stdlib/test/proc_lib_SUITE.erl | 4 | ||||
| -rw-r--r-- | lib/stdlib/test/rand_SUITE.erl | 12 | ||||
| -rw-r--r-- | lib/stdlib/test/string_SUITE.erl | 10 | ||||
| -rw-r--r-- | lib/stdlib/test/unicode_util_SUITE.erl | 52 | ||||
| -rw-r--r-- | lib/stdlib/test/zip_SUITE.erl | 3 | 
21 files changed, 138 insertions, 153 deletions
| diff --git a/lib/stdlib/include/assert.hrl b/lib/stdlib/include/assert.hrl index 2fbaeba0b2..2ec89e7d8a 100644 --- a/lib/stdlib/include/assert.hrl +++ b/lib/stdlib/include/assert.hrl @@ -309,7 +309,7 @@                                         {unexpected_success, __V}]})              catch                  Class:Term -> ok; -                __C:__T -> +                __C:__T:__S ->                      erlang:error({assertException,                                    [{module, ?MODULE},                                     {line, ?LINE}, @@ -318,8 +318,7 @@                                      "{ "++(??Class)++" , "++(??Term)                                      ++" , [...] }"},                                     {unexpected_exception, -                                    {__C, __T, -                                     erlang:get_stacktrace()}}]}) +                                    {__C, __T, __S}}]})              end            end)())          end). @@ -338,7 +337,7 @@                                         {unexpected_success, __V}]})              catch                  Class:Term -> ok; -                __C:__T -> +                __C:__T:__S ->                      erlang:error({assertException,                                    [{module, ?MODULE},                                     {line, ?LINE}, @@ -348,8 +347,7 @@                                      "{ "++(??Class)++" , "++(??Term)                                      ++" , [...] }"},                                     {unexpected_exception, -                                    {__C, __T, -                                     erlang:get_stacktrace()}}]}) +                                    {__C, __T, __S}}]})              end            end)())          end). @@ -378,7 +376,7 @@              try (Expr) of                  _ -> ok              catch -                __C:__T -> +                __C:__T:__S ->                      case __C of                          Class ->                              case __T of @@ -391,9 +389,7 @@                                                      "{ "++(??Class)++" , "                                                      ++(??Term)++" , [...] }"},                                                     {unexpected_exception, -                                                    {__C, __T, -                                                     erlang:get_stacktrace() -                                                    }}]}); +                                                    {__C, __T, __S}}]});                                  _ -> ok                              end;                          _ -> ok @@ -407,7 +403,7 @@              try (Expr) of                  _ -> ok              catch -                __C:__T -> +                __C:__T:__S ->                      case __C of                          Class ->                              case __T of @@ -421,9 +417,7 @@                                                      "{ "++(??Class)++" , "                                                      ++(??Term)++" , [...] }"},                                                     {unexpected_exception, -                                                    {__C, __T, -                                                     erlang:get_stacktrace() -                                                    }}]}); +                                                    {__C, __T, __S}}]});                                  _ -> ok                              end;                          _ -> ok diff --git a/lib/stdlib/src/c.erl b/lib/stdlib/src/c.erl index 9a447af5b7..3597e61c26 100644 --- a/lib/stdlib/src/c.erl +++ b/lib/stdlib/src/c.erl @@ -1034,8 +1034,8 @@ appcall(App, M, F, Args) ->      try  	apply(M, F, Args)      catch -	error:undef -> -	    case erlang:get_stacktrace() of +	error:undef:S -> +	    case S of  		[{M,F,Args,_}|_] ->  		    Arity = length(Args),  		    io:format("Call to ~w:~w/~w in application ~w failed.\n", diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl index 4e3fe0e5c1..e1a36abc70 100644 --- a/lib/stdlib/src/dets.erl +++ b/lib/stdlib/src/dets.erl @@ -1288,8 +1288,8 @@ init(Parent, Server) ->              catch                  exit:normal ->                      exit(normal); -                _:Bad -> -                    bug_found(no_name, Op, Bad, From), +                _:Bad:Stacktrace -> +                    bug_found(no_name, Op, Bad, Stacktrace, From),                      exit(Bad) % give up              end      end. @@ -1371,8 +1371,8 @@ do_apply_op(Op, From, Head, N) ->      catch           exit:normal ->               exit(normal); -        _:Bad ->  -            bug_found(Head#head.name, Op, Bad, From), +        _:Bad:Stacktrace ->  +            bug_found(Head#head.name, Op, Bad, Stacktrace, From),              open_file_loop(Head, N)      end. @@ -1581,7 +1581,7 @@ apply_op(Op, From, Head, N) ->  	    ok      end. -bug_found(Name, Op, Bad, From) -> +bug_found(Name, Op, Bad, Stacktrace, From) ->      case dets_utils:debug_mode() of          true ->              %% If stream_op/5 found more requests, this is not @@ -1590,7 +1590,7 @@ bug_found(Name, Op, Bad, From) ->                ("** dets: Bug was found when accessing table ~tw,~n"                 "** dets: operation was ~tp and reply was ~tw.~n"                 "** dets: Stacktrace: ~tw~n", -               [Name, Op, Bad, erlang:get_stacktrace()]); +               [Name, Op, Bad, Stacktrace]);          false ->              error_logger:format                ("** dets: Bug was found when accessing table ~tw~n", diff --git a/lib/stdlib/src/dets_utils.erl b/lib/stdlib/src/dets_utils.erl index 17f55ebdc2..4c8ea9e82b 100644 --- a/lib/stdlib/src/dets_utils.erl +++ b/lib/stdlib/src/dets_utils.erl @@ -377,7 +377,8 @@ corrupt_reason(Head, Reason0) ->                   no_disk_map ->                        Reason0;                   DM -> -                    ST = erlang:get_stacktrace(), +                    {current_stacktrace, ST} = +                         erlang:process_info(self(), current_stacktrace),                      PD = get(),                      {Reason0, ST, PD, DM}               end, diff --git a/lib/stdlib/src/escript.erl b/lib/stdlib/src/escript.erl index 132f8efbbe..beea9927d2 100644 --- a/lib/stdlib/src/escript.erl +++ b/lib/stdlib/src/escript.erl @@ -283,8 +283,7 @@ start(EscriptOptions) ->          throw:Str ->              io:format("escript: ~ts\n", [Str]),              my_halt(127); -        _:Reason -> -            Stk = erlang:get_stacktrace(), +        _:Reason:Stk ->              io:format("escript: Internal error: ~tp\n", [Reason]),              io:format("~tp\n", [Stk]),              my_halt(127) @@ -759,8 +758,8 @@ run(Module, Args) ->          Module:main(Args),          my_halt(0)      catch -        Class:Reason -> -            fatal(format_exception(Class, Reason)) +        Class:Reason:StackTrace -> +            fatal(format_exception(Class, Reason, StackTrace))      end.  -spec interpret(_, _, _, _) -> no_return(). @@ -793,8 +792,8 @@ interpret(Forms, HasRecs,  File, Args) ->                                   end}),          my_halt(0)      catch -        Class:Reason -> -            fatal(format_exception(Class, Reason)) +        Class:Reason:StackTrace -> +            fatal(format_exception(Class, Reason, StackTrace))      end.  report_errors(Errors) -> @@ -873,7 +872,7 @@ eval_exprs([E|Es], Bs0, Lf, Ef, RBs) ->      {value,_V,Bs} = erl_eval:expr(E, Bs0, Lf, Ef, RBs1),      eval_exprs(Es, Bs, Lf, Ef, RBs). -format_exception(Class, Reason) -> +format_exception(Class, Reason, StackTrace) ->      Enc = encoding(),      P = case Enc of              latin1 -> "P"; @@ -882,7 +881,6 @@ format_exception(Class, Reason) ->      PF = fun(Term, I) ->                   io_lib:format("~." ++ integer_to_list(I) ++ P, [Term, 50])           end, -    StackTrace = erlang:get_stacktrace(),      StackFun = fun(M, _F, _A) -> (M =:= erl_eval) or (M =:= ?MODULE) end,      lib:format_exception(1, Class, Reason, StackTrace, StackFun, PF, Enc). @@ -916,8 +914,8 @@ hidden_apply(App, M, F, Args) ->      try  	apply(fun() -> M end(), F, Args)      catch -	error:undef -> -	    case erlang:get_stacktrace() of +	error:undef:StackTrace -> +	    case StackTrace of  		[{M,F,Args,_} | _] ->  		    Arity = length(Args),  		    Text = io_lib:format("Call to ~w:~w/~w in application ~w failed.\n", diff --git a/lib/stdlib/src/ets.erl b/lib/stdlib/src/ets.erl index adef1640be..039ab45868 100644 --- a/lib/stdlib/src/ets.erl +++ b/lib/stdlib/src/ets.erl @@ -882,10 +882,10 @@ tab2file(Tab, File, Options) ->  		_ = disk_log:close(Name),  		_ = file:delete(File),  		exit(ExReason); -	    error:ErReason -> +	    error:ErReason:StackTrace ->  		_ = disk_log:close(Name),  		_ = file:delete(File), -	        erlang:raise(error,ErReason,erlang:get_stacktrace()) +	        erlang:raise(error,ErReason,StackTrace)  	end      catch  	throw:TReason2 -> @@ -1060,9 +1060,9 @@ file2tab(File, Opts) ->  		exit:ExReason ->  		    ets:delete(Tab),  		    exit(ExReason); -		error:ErReason -> +		error:ErReason:StackTrace ->  		    ets:delete(Tab), -		    erlang:raise(error,ErReason,erlang:get_stacktrace()) +		    erlang:raise(error,ErReason,StackTrace)  	    end  	after  	    _ = disk_log:close(Name) diff --git a/lib/stdlib/src/file_sorter.erl b/lib/stdlib/src/file_sorter.erl index 3aeaff8dc4..7f74e71136 100644 --- a/lib/stdlib/src/file_sorter.erl +++ b/lib/stdlib/src/file_sorter.erl @@ -1314,9 +1314,9 @@ infun(W) ->              {cont, W#w{in = NFun}, Objs};          Error ->              error(Error, W1) -    catch Class:Reason -> +    catch Class:Reason:Stacktrace ->          cleanup(W1), -        erlang:raise(Class, Reason, erlang:get_stacktrace()) +        erlang:raise(Class, Reason, Stacktrace)      end.  outfun(A, #w{inout_value = Val} = W) when Val =/= no_value -> @@ -1336,9 +1336,9 @@ outfun(A, W) ->              W#w{out = NF};          Error ->              error(Error, W1) -    catch Class:Reason -> +    catch Class:Reason:Stacktrace ->          cleanup(W1), -        erlang:raise(Class, Reason, erlang:get_stacktrace()) +        erlang:raise(Class, Reason, Stacktrace)      end.  is_keypos(Keypos) when is_integer(Keypos), Keypos > 0 -> diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl index ac172325b5..77a46419f6 100644 --- a/lib/stdlib/src/gen_server.erl +++ b/lib/stdlib/src/gen_server.erl @@ -109,7 +109,7 @@  -define(     STACKTRACE(), -   try throw(ok) catch _ -> erlang:get_stacktrace() end). +   element(2, erlang:process_info(self(), current_stacktrace))).  %%%=========================================================================  %%%  API @@ -369,7 +369,7 @@ init_it(Mod, Args) ->  	{ok, Mod:init(Args)}      catch  	throw:R -> {ok, R}; -	Class:R -> {'EXIT', Class, R, erlang:get_stacktrace()} +	Class:R:S -> {'EXIT', Class, R, S}      end.  %%%======================================================================== @@ -634,7 +634,7 @@ try_dispatch(Mod, Func, Msg, State) ->      catch  	throw:R ->  	    {ok, R}; -        error:undef = R when Func == handle_info -> +        error:undef = R:Stacktrace when Func == handle_info ->              case erlang:function_exported(Mod, handle_info, 2) of                  false ->                      error_logger:warning_msg("** Undefined handle_info in ~p~n" @@ -642,10 +642,10 @@ try_dispatch(Mod, Func, Msg, State) ->                                               [Mod, Msg]),                      {ok, {noreply, State}};                  true -> -                    {'EXIT', error, R, erlang:get_stacktrace()} +                    {'EXIT', error, R, Stacktrace}              end; -	Class:R -> -	    {'EXIT', Class, R, erlang:get_stacktrace()} +	Class:R:Stacktrace -> +	    {'EXIT', Class, R, Stacktrace}      end.  try_handle_call(Mod, Msg, From, State) -> @@ -654,8 +654,8 @@ try_handle_call(Mod, Msg, From, State) ->      catch  	throw:R ->  	    {ok, R}; -	Class:R -> -	    {'EXIT', Class, R, erlang:get_stacktrace()} +	Class:R:Stacktrace -> +	    {'EXIT', Class, R, Stacktrace}      end.  try_terminate(Mod, Reason, State) -> @@ -666,8 +666,8 @@ try_terminate(Mod, Reason, State) ->  	    catch  		throw:R ->  		    {ok, R}; -		Class:R -> -		    {'EXIT', Class, R, erlang:get_stacktrace()} +		Class:R:Stacktrace -> +		    {'EXIT', Class, R, Stacktrace}  	   end;  	false ->  	    {ok, ok} diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl index 1a7736fc7e..f95b2ea9cd 100644 --- a/lib/stdlib/src/gen_statem.erl +++ b/lib/stdlib/src/gen_statem.erl @@ -365,7 +365,7 @@ event_type(Type) ->  -define(     STACKTRACE(), -   try throw(ok) catch _ -> erlang:get_stacktrace() end). +   element(2, erlang:process_info(self(), current_stacktrace))).  -define(not_sys_debug, []).  %% @@ -590,11 +590,11 @@ call_dirty(ServerRef, Request, Timeout, T) ->          {ok,Reply} ->              Reply      catch -        Class:Reason -> +        Class:Reason:Stacktrace ->              erlang:raise(                Class,                {Reason,{?MODULE,call,[ServerRef,Request,Timeout]}}, -              erlang:get_stacktrace()) +              Stacktrace)      end.  call_clean(ServerRef, Request, Timeout, T) -> @@ -608,9 +608,8 @@ call_clean(ServerRef, Request, Timeout, T) ->                                ServerRef, '$gen_call', Request, T) of                              Result ->                                  {Ref,Result} -                        catch Class:Reason -> -                                {Ref,Class,Reason, -                                 erlang:get_stacktrace()} +                        catch Class:Reason:Stacktrace -> +                                {Ref,Class,Reason,Stacktrace}                          end              end),      Mref = monitor(process, Pid), @@ -697,8 +696,7 @@ init_it(Starter, Parent, ServerRef, Module, Args, Opts) ->      catch  	Result ->  	    init_result(Starter, Parent, ServerRef, Module, Result, Opts); -	Class:Reason -> -	    Stacktrace = erlang:get_stacktrace(), +	Class:Reason:Stacktrace ->  	    Name = gen:get_proc_name(ServerRef),  	    gen:unregister_name(ServerRef),  	    proc_lib:init_ack(Starter, {error,Reason}), @@ -1584,8 +1582,8 @@ call_callback_mode(#state{module = Module} = S) ->      catch  	CallbackMode ->  	    callback_mode_result(S, CallbackMode); -	Class:Reason -> -	    [Class,Reason,erlang:get_stacktrace()] +	Class:Reason:Stacktrace -> +	    [Class,Reason,Stacktrace]      end.  callback_mode_result(S, CallbackMode) -> @@ -1638,8 +1636,8 @@ call_state_function(      catch  	Result ->  	    {Result,S}; -	Class:Reason -> -	    [Class,Reason,erlang:get_stacktrace()] +	Class:Reason:Stacktrace -> +	    [Class,Reason,Stacktrace]      end. @@ -1827,8 +1825,7 @@ terminate(  		_ -> ok  	    catch  		_ -> ok; -		C:R -> -		    ST = erlang:get_stacktrace(), +		C:R:ST ->  		    error_info(  		      C, R, ST, S, Q,  		      format_status(terminate, get(), S)), diff --git a/lib/stdlib/src/proc_lib.erl b/lib/stdlib/src/proc_lib.erl index 8e10cbe93b..1991585c13 100644 --- a/lib/stdlib/src/proc_lib.erl +++ b/lib/stdlib/src/proc_lib.erl @@ -231,8 +231,8 @@ init_p(Parent, Ancestors, Fun) when is_function(Fun) ->      try  	Fun()      catch -	Class:Reason -> -	    exit_p(Class, Reason, erlang:get_stacktrace()) +	Class:Reason:Stacktrace -> +	    exit_p(Class, Reason, Stacktrace)      end.  -spec init_p(pid(), [pid()], atom(), atom(), [term()]) -> term(). @@ -246,8 +246,8 @@ init_p_do_apply(M, F, A) ->      try  	apply(M, F, A)       catch -	Class:Reason -> -	    exit_p(Class, Reason, erlang:get_stacktrace()) +	Class:Reason:Stacktrace -> +	    exit_p(Class, Reason, Stacktrace)      end.  -spec wake_up(atom(), atom(), [term()]) -> term(). @@ -256,8 +256,8 @@ wake_up(M, F, A) when is_atom(M), is_atom(F), is_list(A) ->      try  	apply(M, F, A)       catch -	Class:Reason -> -	    exit_p(Class, Reason, erlang:get_stacktrace()) +	Class:Reason:Stacktrace -> +	    exit_p(Class, Reason, Stacktrace)      end.  exit_p(Class, Reason, Stacktrace) -> diff --git a/lib/stdlib/src/qlc.erl b/lib/stdlib/src/qlc.erl index f11f9d0a0b..3a66f6930b 100644 --- a/lib/stdlib/src/qlc.erl +++ b/lib/stdlib/src/qlc.erl @@ -301,11 +301,11 @@ eval(QH, Options) ->                              post_funs(Post)                          end                  end -            catch Term -> -                case erlang:get_stacktrace() of +            catch throw:Term:Stacktrace -> +                case Stacktrace of                      [?THROWN_ERROR | _] ->                          Term; -                    Stacktrace -> +                    _ ->                          erlang:raise(throw, Term, Stacktrace)                  end              end @@ -359,11 +359,11 @@ fold(Fun, Acc0, QH, Options) ->                              post_funs(Post)                          end                  end -            catch Term -> -                case erlang:get_stacktrace() of +            catch throw:Term:Stacktrace -> +                case Stacktrace of                      [?THROWN_ERROR | _] ->                          Term; -                    Stacktrace -> +                    _ ->                          erlang:raise(throw, Term, Stacktrace)                  end              end @@ -457,11 +457,11 @@ info(QH, Options) ->                      debug -> % Not documented. Intended for testing only.                          Info                  end -            catch Term -> -                case erlang:get_stacktrace() of +            catch throw:Term:Stacktrace -> +                case Stacktrace of                      [?THROWN_ERROR | _] ->                          Term; -                    Stacktrace -> +                    _ ->                          erlang:raise(throw, Term, Stacktrace)                  end              end @@ -1056,9 +1056,9 @@ cursor_process(H, GUnique, GCache, TmpDir, SpawnOptions, MaxList, TmpUsage) ->                           Prep = prepare_qlc(H, not_a_list, GUnique, GCache,                                               TmpDir, MaxList, TmpUsage),                           setup_qlc(Prep, Setup) -                     catch Class:Reason -> -                           Parent ! {self(), {caught, Class, Reason,  -                                     erlang:get_stacktrace()}}, +                     catch Class:Reason:Stacktrace -> +                           Parent ! {self(), +                                     {caught, Class, Reason, Stacktrace}},                             exit(normal)                       end,                   Parent ! {self(), ok}, @@ -1075,8 +1075,8 @@ parent_fun(Pid, Parent) ->          {TPid, {parent_fun, Fun}} ->              V = try                       {value, Fun()} -                catch Class:Reason -> -                    {parent_fun_caught, Class, Reason, erlang:get_stacktrace()} +                catch Class:Reason:Stacktrace -> +                    {parent_fun_caught, Class, Reason, Stacktrace}              end,              TPid ! {Parent, V},              parent_fun(Pid, Parent); @@ -1101,9 +1101,9 @@ reply(Parent, MonRef, Post, Cont) ->                          throw_error(Cont)                  end              catch  -                Class:Reason -> +                Class:Reason:Stacktrace ->                     post_funs(Post), -                   Message = {caught, Class, Reason, erlang:get_stacktrace()}, +                   Message = {caught, Class, Reason, Stacktrace},                     Parent ! {self(), Message},                     exit(normal)              end, @@ -1392,9 +1392,8 @@ next_loop(Pid, L, N) when N =/= 0 ->          {caught, throw, Error, [?THROWN_ERROR | _]} ->              Error;          {caught, Class, Reason, Stacktrace} -> -            CurrentStacktrace = try erlang:error(foo) -                                catch error:_ -> erlang:get_stacktrace() -                                end, +            {current_stacktrace, CurrentStacktrace} = +                erlang:process_info(self(), current_stacktrace),              erlang:raise(Class, Reason, Stacktrace ++ CurrentStacktrace);          error ->              erlang:error({qlc_cursor_pid_no_longer_exists, Pid}) @@ -2627,9 +2626,9 @@ table_handle(#qlc_table{trav_fun = TraverseFun, trav_MS = TravMS,              Parent =:= self() ->                  try                      ParentFun()  -                catch Class:Reason -> +                catch Class:Reason:Stacktrace ->                      post_funs(Post), -                    erlang:raise(Class, Reason, erlang:get_stacktrace()) +                    erlang:raise(Class, Reason, Stacktrace)                  end;              true ->                  case monitor_request(Parent, {parent_fun, ParentFun}) of @@ -3033,9 +3032,9 @@ file_sort_handle(H, Kp, SortOptions, TmpDir, Compressed, Post, LocalPost) ->          {terms, BTerms} ->              try                   {[binary_to_term(B) || B <- BTerms], Post, LocalPost} -            catch Class:Reason -> +            catch Class:Reason:Stacktrace ->                  post_funs(Post), -                erlang:raise(Class, Reason, erlang:get_stacktrace()) +                erlang:raise(Class, Reason, Stacktrace)              end      end. @@ -3045,9 +3044,9 @@ do_sort(In, Out, Sort, SortOptions, Post) ->              {error, Reason} -> throw_reason(Reason);              Reply -> Reply          end -    catch Class:Term -> +    catch Class:Term:Stacktrace ->          post_funs(Post), -        erlang:raise(Class, Term, erlang:get_stacktrace()) +        erlang:raise(Class, Term, Stacktrace)      end.  do_sort(In, Out, sort, SortOptions) -> @@ -3797,9 +3796,9 @@ call(undefined, _Arg, Default, _Post) ->  call(Fun, Arg, _Default, Post) ->      try          Fun(Arg)  -    catch Class:Reason -> +    catch Class:Reason:Stacktrace ->          post_funs(Post), -        erlang:raise(Class, Reason, erlang:get_stacktrace()) +        erlang:raise(Class, Reason, Stacktrace)      end.  grd(undefined, _Arg) -> diff --git a/lib/stdlib/src/shell.erl b/lib/stdlib/src/shell.erl index ad4984b64c..e4153e7899 100644 --- a/lib/stdlib/src/shell.erl +++ b/lib/stdlib/src/shell.erl @@ -645,8 +645,7 @@ eval_exprs(Es, Shell, Bs0, RT, Lf, Ef, W) ->      catch           exit:normal ->              exit(normal); -        Class:Reason -> -            Stacktrace = erlang:get_stacktrace(), +        Class:Reason:Stacktrace ->              M = {self(),Class,{Reason,Stacktrace}},              case do_catch(Class, Reason) of                  true -> @@ -807,8 +806,8 @@ restrict_handlers(RShMod, Shell, RT) ->  -define(BAD_RETURN(M, F, V),          try erlang:error(reason) -        catch _:_ -> erlang:raise(exit, {restricted_shell_bad_return,V},  -                                  [{M,F,3} | erlang:get_stacktrace()]) +        catch _:_:S -> erlang:raise(exit, {restricted_shell_bad_return,V},  +                                    [{M,F,3} | S])          end).  local_allowed(F, As, RShMod, Bs, Shell, RT) when is_atom(F) -> diff --git a/lib/stdlib/src/zip.erl b/lib/stdlib/src/zip.erl index 81f927f399..39be2abff6 100644 --- a/lib/stdlib/src/zip.erl +++ b/lib/stdlib/src/zip.erl @@ -457,8 +457,7 @@ do_zip(F, Files, Options) ->          Out3 = Output({close, F}, Out2),          {ok, Out3}      catch -        C:R -> -            Stk = erlang:get_stacktrace(), +        C:R:Stk ->              zlib:close(Z),              Output({close, F}, Out0),              erlang:raise(C, R, Stk) diff --git a/lib/stdlib/test/array_SUITE.erl b/lib/stdlib/test/array_SUITE.erl index 5836f275ba..956582c4fd 100644 --- a/lib/stdlib/test/array_SUITE.erl +++ b/lib/stdlib/test/array_SUITE.erl @@ -141,10 +141,10 @@ t(What) ->  			  io:format("Test ~p ~n",[T]),  			  try   			      ?MODULE:T([]) -			  catch _E:_R -> +			  catch _E:_R:_S ->  				  Line = get(test_server_loc),  				  io:format("Failed ~p:~p ~p ~p~n   ~p~n",  -					    [T,Line,_E,_R, erlang:get_stacktrace()]) +					    [T,Line,_E,_R,_S])  			  end  		  end, What). @@ -161,8 +161,8 @@ extract_tests() ->  	       end,  	[Call(Test) || Test <- Tests],  	io:format("Tests ~p~n", [Tests]) -    catch _:Err -> -	    io:format("Error: ~p ~p~n", [Err, erlang:get_stacktrace()]) +    catch _:Err:Stacktrace -> +	    io:format("Error: ~p ~p~n", [Err, Stacktrace])      end,      file:close(In),      file:close(Out). diff --git a/lib/stdlib/test/error_logger_h_SUITE.erl b/lib/stdlib/test/error_logger_h_SUITE.erl index 1f2a9fda0b..9dc04f27a1 100644 --- a/lib/stdlib/test/error_logger_h_SUITE.erl +++ b/lib/stdlib/test/error_logger_h_SUITE.erl @@ -257,8 +257,7 @@ match_output([Item|T], Lines0, AtNode, Depth) ->  	Lines ->  	    match_output(T, Lines, AtNode, Depth)      catch -	C:E -> -	    Stk = erlang:get_stacktrace(), +	C:E:Stk ->  	    io:format("ITEM: ~p", [Item]),  	    io:format("LINES: ~p", [Lines0]),  	    erlang:raise(C, E, Stk) diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl index c747db475a..7c8a386116 100644 --- a/lib/stdlib/test/gen_statem_SUITE.erl +++ b/lib/stdlib/test/gen_statem_SUITE.erl @@ -2040,9 +2040,9 @@ handle_event(Type, Event, State, Data) ->  	Result ->  	    wrap_result(Result)      catch -	throw:Result -> +	throw:Result:Stacktrace ->  	    erlang:raise( -	      throw, wrap_result(Result), erlang:get_stacktrace()) +	      throw, wrap_result(Result), Stacktrace)      end.  unwrap_state([State]) -> diff --git a/lib/stdlib/test/proc_lib_SUITE.erl b/lib/stdlib/test/proc_lib_SUITE.erl index 7686889360..fbdcb518b2 100644 --- a/lib/stdlib/test/proc_lib_SUITE.erl +++ b/lib/stdlib/test/proc_lib_SUITE.erl @@ -446,8 +446,8 @@ init_dont_hang(Config) when is_list(Config) ->  	StartLinkRes = proc_lib:start(?MODULE, init_dont_hang_init, [self()], 1000),  	StartLinkRes = proc_lib:start(?MODULE, init_dont_hang_init, [self()], 1000, []),  	ok -    catch _:Error -> -	    io:format("Error ~p /= ~p ~n",[erlang:get_stacktrace(), StartLinkRes]), +    catch _:Error:Stacktrace -> +	    io:format("Error ~p /= ~p ~n",[Stacktrace, StartLinkRes]),  	    exit(Error)      end. diff --git a/lib/stdlib/test/rand_SUITE.erl b/lib/stdlib/test/rand_SUITE.erl index 3d3241b33d..15ae4fa2d7 100644 --- a/lib/stdlib/test/rand_SUITE.erl +++ b/lib/stdlib/test/rand_SUITE.erl @@ -82,9 +82,9 @@ test() ->                try                    ok = ?MODULE:Test([]),                    io:format("~p: ok~n", [Test]) -              catch _:Reason -> +              catch _:Reason:Stacktrace ->                        io:format("Failed: ~p: ~p ~p~n", -                                [Test, Reason, erlang:get_stacktrace()]) +                                [Test, Reason, Stacktrace])                end        end, Tests). @@ -98,8 +98,8 @@ seed(Config) when is_list(Config) ->      Algs = algs(),      Test = fun(Alg) ->  		   try seed_1(Alg) -		   catch _:Reason -> -			   ct:fail({Alg, Reason, erlang:get_stacktrace()}) +		   catch _:Reason:Stacktrace -> +			   ct:fail({Alg, Reason, Stacktrace})  		   end  	   end,      [Test(Alg) || Alg <- Algs], @@ -722,12 +722,12 @@ uniform_real_conv_check(M, E, Gen) ->                 [["16#",integer_to_list(G,16),$\s]||G<-Gen]]),              ct:fail({neq, FF, F})      catch -        Error:Reason -> +        Error:Reason:Stacktrace ->              ct:pal(                "~w:~p ~s: ~s~n",                [Error, Reason, rand:float2str(F),                 [["16#",integer_to_list(G,16),$\s]||G<-Gen]]), -            ct:fail({Error, Reason, F, erlang:get_stacktrace()}) +            ct:fail({Error, Reason, F, Stacktrace})      end. diff --git a/lib/stdlib/test/string_SUITE.erl b/lib/stdlib/test/string_SUITE.erl index d02a6eac0a..c4a469c251 100644 --- a/lib/stdlib/test/string_SUITE.erl +++ b/lib/stdlib/test/string_SUITE.erl @@ -877,9 +877,9 @@ test_1(Line, Func, Str, Args, Exp) ->      catch          error:Exp ->              ok; -        error:Reason -> +        error:Reason:Stacktrace ->              io:format("~p:~p: Crash ~p ~p~n", -                      [?MODULE,Line, Reason, erlang:get_stacktrace()]), +                      [?MODULE,Line, Reason, Stacktrace]),              exit({error, Func})      end. @@ -944,10 +944,10 @@ check_types(Line, Func, [Str|_], Res)  ->              io:format("Failed: ~p ~p: ~p ~p~n",[Line, Func, T1, T2]),              io:format("  ~p  => ~p~n", [Str, Res]),              error; -          _:Reason -> -            io:format("Crash: ~p in~n ~p~n",[Reason, erlang:get_stacktrace()]), +          _:Reason:Stacktrace -> +            io:format("Crash: ~p in~n ~p~n",[Reason, Stacktrace]),              io:format("Failed: ~p ~p: ~p => ~p~n", [Line, Func, Str, Res]), -            exit({Reason, erlang:get_stacktrace()}) +            exit({Reason, Stacktrace})      end.  check_types_1(T, T) -> diff --git a/lib/stdlib/test/unicode_util_SUITE.erl b/lib/stdlib/test/unicode_util_SUITE.erl index 632d9ae6e6..40b1c260a5 100644 --- a/lib/stdlib/test/unicode_util_SUITE.erl +++ b/lib/stdlib/test/unicode_util_SUITE.erl @@ -136,10 +136,10 @@ verify_gc(Line0, N, Acc) ->              io:format("Expected: ~p~n", [Res]),              io:format("Got: ~w~n", [Other]),              Acc+1; -          Cl:R -> +          Cl:R:Stacktrace ->              io:format("~p: ~ts => |~tp|~n",[N, Line, Str]),              io:format("Expected: ~p~n", [Res]), -            erlang:raise(Cl,R,erlang:get_stacktrace()) +            erlang:raise(Cl,R,Stacktrace)      end.  gc_test_data([[247]|Rest], Str, [First|GCs]) -> @@ -175,29 +175,29 @@ verify_nfd(Data0, LineNo, _Acc) ->          C3GC = fetch(C1, fun unicode_util:nfd/1),          C3GC = fetch(C2, fun unicode_util:nfd/1),          C3GC = fetch(C3, fun unicode_util:nfd/1) -    catch  _Cl:{badmatch, Other} = _R-> +    catch  _Cl:{badmatch, Other} = _R: Stacktrace ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C1, C1]),              io:format("Expected: ~ts ~w~n", [C3GC, C3GC]),              io:format("Got: ~ts ~w~n", [Other, Other]), -            erlang:raise(_Cl,_R,erlang:get_stacktrace()); -           Cl:R -> +            erlang:raise(_Cl,_R,Stacktrace); +           Cl:R:Stacktrace ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C3]), -            erlang:raise(Cl,R,erlang:get_stacktrace()) +            erlang:raise(Cl,R,Stacktrace)      end,      C5GC = fetch(C5, fun unicode_util:gc/1),      try          C5GC = fetch(C4, fun unicode_util:nfd/1),          C5GC = fetch(C5, fun unicode_util:nfd/1) -    catch  _Cl2:{badmatch, Other2} = _R2-> +    catch  _Cl2:{badmatch, Other2} = _R2:Stacktrace2 ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C1, C1]),              io:format("Expected: ~ts ~w~n", [C5GC, C5GC]),              io:format("Got:      ~ts ~w~n", [Other2, Other2]), -            erlang:raise(_Cl2,_R2,erlang:get_stacktrace()); -           Cl2:R2 -> +            erlang:raise(_Cl2,_R2,Stacktrace2); +           Cl2:R2:Stacktrace2 ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C5]), -            erlang:raise(Cl2,R2,erlang:get_stacktrace()) +            erlang:raise(Cl2,R2,Stacktrace2)      end,      ok. @@ -218,29 +218,29 @@ verify_nfc(Data0, LineNo, _Acc) ->          C2GC = fetch(C1, fun unicode_util:nfc/1),          C2GC = fetch(C2, fun unicode_util:nfc/1),          C2GC = fetch(C3, fun unicode_util:nfc/1) -    catch  _Cl:{badmatch, Other} = _R-> +    catch  _Cl:{badmatch, Other} = _R:Stacktrace ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C1, C1]),              io:format("Expected: ~ts ~w~n", [C2GC, C2GC]),              io:format("Got:      ~ts ~w~n", [Other, Other]), -            erlang:raise(_Cl,_R,erlang:get_stacktrace()); -           Cl:R -> +            erlang:raise(_Cl,_R,Stacktrace); +           Cl:R:Stacktrace ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C3]), -            erlang:raise(Cl,R,erlang:get_stacktrace()) +            erlang:raise(Cl,R,Stacktrace)      end,      C4GC = fetch(C4, fun unicode_util:gc/1),      try          C4GC = fetch(C4, fun unicode_util:nfc/1),          C4GC = fetch(C5, fun unicode_util:nfc/1) -    catch  _Cl2:{badmatch, Other2} = _R2-> +    catch  _Cl2:{badmatch, Other2} = _R2:Stacktrace2 ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C1, C1]),              io:format("Expected: ~ts ~w~n", [C4GC, C4GC]),              io:format("Got: ~ts ~w~n", [Other2, Other2]), -            erlang:raise(_Cl2,_R2,erlang:get_stacktrace()); -           Cl2:R2 -> +            erlang:raise(_Cl2,_R2,Stacktrace2); +           Cl2:R2:Stacktrace2 ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C5]), -            erlang:raise(Cl2,R2,erlang:get_stacktrace()) +            erlang:raise(Cl2,R2,Stacktrace2)      end,      ok. @@ -263,15 +263,15 @@ verify_nfkd(Data0, LineNo, _Acc) ->          C5GC = lists:flatten(fetch(C3, fun unicode_util:nfkd/1)),          C5GC = lists:flatten(fetch(C4, fun unicode_util:nfkd/1)),          C5GC = lists:flatten(fetch(C5, fun unicode_util:nfkd/1)) -    catch  _Cl:{badmatch, Other} = _R-> +    catch  _Cl:{badmatch, Other} = _R:Stacktrace ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C5, C5]),              io:format("Expected: ~ts ~w~n", [C5GC, C5GC]),              io:format("Got: ~ts ~w~n", [Other, Other]), -            erlang:raise(_Cl,_R,erlang:get_stacktrace()); -           Cl:R -> +            erlang:raise(_Cl,_R,Stacktrace); +           Cl:R:Stacktrace ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C3]), -            erlang:raise(Cl,R,erlang:get_stacktrace()) +            erlang:raise(Cl,R,Stacktrace)      end,      ok. @@ -296,15 +296,15 @@ verify_nfkc(Data0, LineNo, _Acc) ->          C4GC = lists:flatten(fetch(C4, fun unicode_util:nfkc/1)),          C4GC = lists:flatten(fetch(C5, fun unicode_util:nfkc/1)) -    catch  _Cl:{badmatch, Other} = _R-> +    catch  _Cl:{badmatch, Other} = _R:Stacktrace ->              io:format("Failed: ~p~nInput: ~ts~n\t=> ~w |~ts|~n",[LineNo, Data1, C4, C4]),              io:format("Expected: ~ts ~w~n", [C4GC, C4GC]),              io:format("Got:      ~ts ~w~n", [Other, Other]), -            erlang:raise(_Cl,_R,erlang:get_stacktrace()); -           Cl:R -> +            erlang:raise(_Cl,_R,Stacktrace); +           Cl:R:Stacktrace ->              io:format("~p: ~ts => |~tp|~n",[LineNo, Data1, C1]),              io:format("Expected: ~p~n", [C3]), -            erlang:raise(Cl,R,erlang:get_stacktrace()) +            erlang:raise(Cl,R,Stacktrace)      end,      ok. diff --git a/lib/stdlib/test/zip_SUITE.erl b/lib/stdlib/test/zip_SUITE.erl index 1dfcda4ed0..e5ba629c55 100644 --- a/lib/stdlib/test/zip_SUITE.erl +++ b/lib/stdlib/test/zip_SUITE.erl @@ -909,8 +909,7 @@ do_fd_leak(Bad, N) ->          ok ->              do_fd_leak(Bad, N + 1)      catch -        C:R -> -            Stk = erlang:get_stacktrace(), +        C:R:Stk ->              io:format("Bad error after ~p attempts\n", [N]),              erlang:raise(C, R, Stk)      end. | 
