-module(failing_funs).
-compile(export_all).
% Crashes with system call. No spec.
foo1() -> halt().
% Crashes with system call. With spec.
-spec foo2() -> no_return().
foo2() -> halt().
% Crashes on its own. No spec.
foo3() -> case a of b -> ok end.
% Crashes on its own. With spec.
-spec foo4() -> no_return().
foo4() -> case a of b -> ok end.
% Creates fun that crashes with system call. No spec.
foo5() -> fun() -> halt() end.
% Creates fun that crashes with system call. With spec.
-spec foo6() -> fun(() -> no_return()).
foo6() -> fun() -> halt() end.
% Creates fun from named fun that will crash. Neither have spec.
foo7() -> fun foo1/0.
% Creates fun from named fun that will crash. Has spec.
-spec foo8() -> fun(() -> no_return()).
foo8() -> fun foo1/0.
% Creates fun from named fun that will crash. Named has spec.
foo9() -> fun foo2/0.
% Creates fun from named fun that will crash. Both have specs.
-spec foo10() -> fun(() -> no_return()).
foo10() -> fun foo2/0.
% Creates fun from named fun that will crash. Neither have spec.
foo11() -> fun foo3/0.
% Creates fun from named fun that will crash. Has spec.
-spec foo12() -> fun(() -> no_return()).
foo12() -> fun foo3/0.
% Creates fun from named fun that will crash. Named has spec.
foo13() -> fun foo4/0.
% Creates fun from named fun that will crash. Both have specs.
-spec foo14() -> fun(() -> no_return()).
foo14() -> fun foo4/0.
% Creates fun calling a named fun that will crash. Neither have spec.
foo15() -> fun() -> foo1() end.
% Creates fun calling a named fun that will crash. Has spec.
-spec foo16() -> fun(() -> no_return()).
foo16() -> fun() -> foo1() end.
% Creates fun calling a named fun that will crash. Named has spec.
foo17() -> fun() -> foo2() end.
% Creates fun calling a named fun that will crash. Both have specs.
-spec foo18() -> fun(() -> no_return()).
foo18() -> fun() -> foo2() end.
% Creates fun calling a named fun that will crash. Neither have spec.
foo19() -> fun() -> foo3() end.
% Creates fun calling a named fun that will crash. Has spec.
-spec foo20() -> fun(() -> no_return()).
foo20() -> fun() -> foo3() end.
% Creates fun calling a named fun that will crash. Named has spec.
foo21() -> fun() -> foo4() end.
% Creates fun calling a named fun that will crash. Both have specs.
-spec foo22() -> fun(() -> no_return()).
foo22() -> fun() -> foo4() end.
% Creates two funs with no local return and will return one or die. No spec.
foo23() ->
Bomb = fun() -> halt() end,
case get(42) of
a -> Bomb();
b -> fun() -> halt() end
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo24() -> fun(() -> no_return()).
foo24() ->
Bomb = fun() -> halt() end,
case get(42) of
a -> Bomb();
b -> fun() -> halt() end
end.
% Creates two funs with no local return and will return one or die. No spec.
foo25() ->
Bomb = fun() -> foo1() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo1() end
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo26() -> fun(() -> no_return()).
foo26() ->
Bomb = fun foo1/0,
case get(42) of
a -> Bomb();
b -> fun foo1/0
end.
% Creates two funs with no local return and will return one or die. No spec.
foo27() ->
Bomb = fun foo1/0,
case get(42) of
a -> Bomb();
b -> fun foo1/0
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo28() -> fun(() -> no_return()).
foo28() ->
Bomb = fun() -> foo1() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo1() end
end.
% Creates two funs with no local return and will return one or die. No spec.
foo29() ->
Bomb = fun() -> foo2() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo2() end
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo30() -> fun(() -> no_return()).
foo30() ->
Bomb = fun foo2/0,
case get(42) of
a -> Bomb();
b -> fun foo2/0
end.
% Creates two funs with no local return and will return one or die. No spec.
foo31() ->
Bomb = fun foo2/0,
case get(42) of
a -> Bomb();
b -> fun foo2/0
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo32() -> fun(() -> no_return()).
foo32() ->
Bomb = fun() -> foo2() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo2() end
end.
% Creates two funs with no local return and will return one or die. No spec.
foo33() ->
Bomb = fun() -> foo3() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo3() end
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo34() -> fun(() -> no_return()).
foo34() ->
Bomb = fun foo3/0,
case get(42) of
a -> Bomb();
b -> fun foo3/0
end.
% Creates two funs with no local return and will return one or die. No spec.
foo35() ->
Bomb = fun foo3/0,
case get(42) of
a -> Bomb();
b -> fun foo3/0
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo36() -> fun(() -> no_return()).
foo36() ->
Bomb = fun() -> foo3() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo3() end
end.
% Creates two funs with no local return and will return one or die. No spec.
foo37() ->
Bomb = fun() -> foo4() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo4() end
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo38() -> fun(() -> no_return()).
foo38() ->
Bomb = fun foo4/0,
case get(42) of
a -> Bomb();
b -> fun foo4/0
end.
% Creates two funs with no local return and will return one or die. No spec.
foo39() ->
Bomb = fun foo4/0,
case get(42) of
a -> Bomb();
b -> fun foo4/0
end.
% Creates two funs with no local return and will return one or die. With spec.
-spec foo40() -> fun(() -> no_return()).
foo40() ->
Bomb = fun() -> foo4() end,
case get(42) of
a -> Bomb();
b -> fun() -> foo4() end
end.
% Obtains two funs with no local return and will return one or die. No spec.
foo41() ->
Bomb = foo5(),
case get(42) of
a -> Bomb();
b -> foo5()
end.
% Obtains two funs with no local return and will return one or die. With spec.
-spec foo42() -> fun(() -> no_return()).
foo42() ->
Bomb = foo5(),
case get(42) of
a -> Bomb();
b -> foo5()
end.