From ab7bcce2778d04daec2276e568deba954c6f9b57 Mon Sep 17 00:00:00 2001
From: Richard Carlsson <richardc@klarna.com>
Date: Wed, 2 Dec 2015 17:27:11 +0100
Subject: Add testcase for init:stop/1 status

---
 lib/kernel/test/init_SUITE.erl | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

(limited to 'lib')

diff --git a/lib/kernel/test/init_SUITE.erl b/lib/kernel/test/init_SUITE.erl
index e7b44a714c..a332e7966b 100644
--- a/lib/kernel/test/init_SUITE.erl
+++ b/lib/kernel/test/init_SUITE.erl
@@ -27,7 +27,7 @@
 -export([get_arguments/1, get_argument/1, boot_var/1, restart/1,
 	 many_restarts/0, many_restarts/1,
 	 get_plain_arguments/1,
-	 reboot/1, stop/1, get_status/1, script_id/1]).
+	 reboot/1, stop_status/1, stop/1, get_status/1, script_id/1]).
 -export([boot1/1, boot2/1]).
 
 -export([init_per_testcase/2, end_per_testcase/2]).
@@ -48,7 +48,7 @@ suite() ->
 all() -> 
     [get_arguments, get_argument, boot_var,
      many_restarts,
-     get_plain_arguments, restart, get_status, script_id,
+     get_plain_arguments, restart, stop_status, get_status, script_id,
      {group, boot}].
 
 groups() -> 
@@ -462,6 +462,20 @@ reboot(Config) when is_list(Config) ->
     end,
     ok.
 
+%% ------------------------------------------------
+%%
+%% ------------------------------------------------
+stop_status(Config) when is_list(Config) ->
+    badarg = catch_stop([65,[66],67]),  % flat strings only
+    badarg = catch_stop([65, 666, 67]),  % only bytes in string
+    badarg = catch_stop(abort),  % 'abort' not allowed
+    badarg = catch_stop(true),  % other atoms not allowed
+    badarg = catch_stop(-1),  % no negative statuses
+    ok.
+
+catch_stop(Status) ->
+    try init:stop(Status) catch error:badarg -> badarg end.
+
 %% ------------------------------------------------
 %%
 %% ------------------------------------------------
-- 
cgit v1.2.3


From f9cb80861f169743a96099a06d68149a91f18dfa Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 20 May 2016 15:58:04 +0200
Subject: erts: Implement halt/0 and halt/1 in Erlang

just to make things simpler.
---
 lib/hipe/cerl/erl_bif_types.erl | 6 ------
 lib/stdlib/src/erl_compile.erl  | 1 +
 lib/stdlib/src/escript.erl      | 1 +
 3 files changed, 2 insertions(+), 6 deletions(-)

(limited to 'lib')

diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 9453ca6c6f..f649c6e599 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -154,8 +154,6 @@ type(M, F, A, Xs) ->
               erl_types:erl_type().
 
 %%-- erlang -------------------------------------------------------------------
-type(erlang, halt, 0, _, _) -> t_none();
-type(erlang, halt, 1, _, _) -> t_none();
 type(erlang, halt, 2, _, _) -> t_none();
 type(erlang, exit, 1, _, _) -> t_none();
 type(erlang, error, 1, _, _) -> t_none();
@@ -2341,10 +2339,6 @@ arg_types(erlang, bit_size, 1) ->
 %% Guard bif, needs to be here.
 arg_types(erlang, byte_size, 1) ->
   [t_bitstr()];
-arg_types(erlang, halt, 0) ->
-  [];
-arg_types(erlang, halt, 1) ->
-  [t_sup([t_non_neg_fixnum(), t_atom('abort'), t_string()])];
 arg_types(erlang, halt, 2) ->
   [t_sup([t_non_neg_fixnum(), t_atom('abort'), t_string()]),
    t_list(t_tuple([t_atom('flush'), t_boolean()]))];
diff --git a/lib/stdlib/src/erl_compile.erl b/lib/stdlib/src/erl_compile.erl
index ef54076ee3..a6ae398d03 100644
--- a/lib/stdlib/src/erl_compile.erl
+++ b/lib/stdlib/src/erl_compile.erl
@@ -60,6 +60,7 @@ compile_cmdline() ->
 	_ -> my_halt(2)
     end.
 
+-spec my_halt(_) -> no_return().
 my_halt(Reason) ->
     erlang:halt(Reason).
 
diff --git a/lib/stdlib/src/escript.erl b/lib/stdlib/src/escript.erl
index b8ce311c35..f53b0e2246 100644
--- a/lib/stdlib/src/escript.erl
+++ b/lib/stdlib/src/escript.erl
@@ -906,6 +906,7 @@ anno(L) ->
 fatal(Str) ->
     throw(Str).
 
+-spec my_halt(_) -> no_return().
 my_halt(Reason) ->
     erlang:halt(Reason).
 
-- 
cgit v1.2.3


From ab7d8c83a047c2d4c46f1b5f5a7e231af3268e74 Mon Sep 17 00:00:00 2001
From: Sverker Eriksson <sverker@erlang.org>
Date: Fri, 20 May 2016 16:37:01 +0200
Subject: hipe: Add halt/2 to functions that always fail

Seems like halt/2 should be a member of this club.
---
 lib/hipe/icode/hipe_icode_type.erl | 1 +
 1 file changed, 1 insertion(+)

(limited to 'lib')

diff --git a/lib/hipe/icode/hipe_icode_type.erl b/lib/hipe/icode/hipe_icode_type.erl
index e3ba00c5e9..5eae8d440a 100644
--- a/lib/hipe/icode/hipe_icode_type.erl
+++ b/lib/hipe/icode/hipe_icode_type.erl
@@ -363,6 +363,7 @@ call_always_fails(#icode_call{} = I, Info) ->
     %% These can actually be calls too.
     {erlang, halt, 0} -> false;
     {erlang, halt, 1} -> false;
+    {erlang, halt, 2} -> false;
     {erlang, exit, 1} -> false;
     {erlang, error, 1} -> false;
     {erlang, error, 2} -> false;
-- 
cgit v1.2.3