aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorStavros Aronis <[email protected]>2011-03-21 18:36:05 +0200
committerHenrik Nord <[email protected]>2011-05-04 15:06:16 +0200
commit50184171c3b28270aae9f21926383185e9188234 (patch)
treedefbe2bef945eb6b81586e6a20c42b72ca56ebc3 /lib
parent320bfe173aedf71a60d2b3c69d6422fd4abcfd4a (diff)
downloadotp-50184171c3b28270aae9f21926383185e9188234.tar.gz
otp-50184171c3b28270aae9f21926383185e9188234.tar.bz2
otp-50184171c3b28270aae9f21926383185e9188234.zip
Add small/none_scc_inf_loop
Diffstat (limited to 'lib')
-rw-r--r--lib/dialyzer/test/small_SUITE_data/results/none_scc_inf_loop5
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/none_scc_inf_loop.erl21
2 files changed, 26 insertions, 0 deletions
diff --git a/lib/dialyzer/test/small_SUITE_data/results/none_scc_inf_loop b/lib/dialyzer/test/small_SUITE_data/results/none_scc_inf_loop
new file mode 100644
index 0000000000..3b1b204708
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/results/none_scc_inf_loop
@@ -0,0 +1,5 @@
+
+none_scc_inf_loop.erl:10: Function foo/0 has no local return
+none_scc_inf_loop.erl:13: Function foo/1 has no local return
+none_scc_inf_loop.erl:13: The pattern 0 can never match the type 1 | 3
+none_scc_inf_loop.erl:18: Function bar/1 has no local return
diff --git a/lib/dialyzer/test/small_SUITE_data/src/none_scc_inf_loop.erl b/lib/dialyzer/test/small_SUITE_data/src/none_scc_inf_loop.erl
new file mode 100644
index 0000000000..111758965c
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/none_scc_inf_loop.erl
@@ -0,0 +1,21 @@
+%%===========================================================================
+%% Test that made dialyzer go into an infinite loop. The reason was that
+%% t_inf(t_unit(), t_none()) returned t_unit() instead of t_none() as it
+%% should. The issue was identified and fixed by Stavros Aronis on 5/11/2010.
+%%===========================================================================
+-module(none_scc_inf_loop).
+
+-export([foo/0]).
+
+foo() ->
+ foo(3).
+
+foo(0) ->
+ exit(foo);
+foo(N) ->
+ bar(N-1).
+
+bar(0) ->
+ exit(foo);
+bar(N) ->
+ foo(N-1).