diff options
author | Kostis Sagonas <[email protected]> | 2010-11-07 18:32:17 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2010-11-09 14:59:12 +0100 |
commit | 5c1dd79d08e8725b408d11b17ceb99e80ec7cddb (patch) | |
tree | e79caa133c79b60939bd238c29d4928511fe8aa5 /lib/dialyzer/src/dialyzer_cl.erl | |
parent | 76378bb4a1a89d08b41d6f3df0edc6c26160bef7 (diff) | |
download | otp-5c1dd79d08e8725b408d11b17ceb99e80ec7cddb.tar.gz otp-5c1dd79d08e8725b408d11b17ceb99e80ec7cddb.tar.bz2 otp-5c1dd79d08e8725b408d11b17ceb99e80ec7cddb.zip |
dialyzer: Speed up analysis of nested list comprehensions
Nested list comprehensions are translated into strongly connected
funs but dialyzer ignored this. This meant that self-recursive
analysis was normally executed for each fun and the whole fixpoint
took some time to calculate. This patch adds every fun found in
constraint generation to the SCC that is under analysis and then
solves the SCC as a whole.
Possible issues:
- The returned dict contains more entries than usual. This
triggered a bug in contract checking that is dealt with is
this patch as well (dialyzer_contracts.erl).
- As it's not easy to tell apart real fun SCCs from simple funs it
performance might be hampered in the simple funs case.
While doing these changes, also added and strengthened some specs.
In addition, incorporated a modified patch by Ahmed Omar that fixes
a bug in dialyzer_analysis_callgraph module that kept the files of
only one selected directory in dialyzer's GUI.
Diffstat (limited to 'lib/dialyzer/src/dialyzer_cl.erl')
-rw-r--r-- | lib/dialyzer/src/dialyzer_cl.erl | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl index 616e2465dc..0250c47ad0 100644 --- a/lib/dialyzer/src/dialyzer_cl.erl +++ b/lib/dialyzer/src/dialyzer_cl.erl @@ -559,7 +559,7 @@ cl_loop(State, LogCache) -> cl_loop(State, LogCache) end. --spec failed_anal_msg(string(), [_]) -> string(). +-spec failed_anal_msg(string(), [_]) -> nonempty_string(). failed_anal_msg(Reason, LogCache) -> Msg = "Analysis failed with error: " ++ Reason ++ "\n", |