Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
No warnings are emitted for funs that are non-returning when the
function that generates them has a contract that specifies that
it will return such a non-returning fun.
The actual bug, reported by Tuncer Ayaz and simplified by Maria
Christakis is included in Dialyzer's tests.
|
|
|
|
|
|
* sa/dialyzer-server-loop-fix:
Fix server loop detection
OTP-9489
|
|
Fixed dialyzer warning occuring on binary comprehension of form
"<< <<>> || {A, B} <- [{a, b}] >>" caused by default clause
inserted by compiler. Since this clause is different from the
case of list comprehension, dialyzer fails to suppress that warning.
|
|
|
|
Warnings about wrong contract ranges are post-processed to be displayed in the
file/line that contains the contract, although they can also be emitted while
processing other modules. For this relocation to succeed the module that
contains the contract should be currently under analysis. If this is not the
case the warning is displayed in the file/line of the call that proves the
discrepancy in the contract.
|
|
Dialyzer does not normally emit warnings for functions that
implement non-terminating server loops. This detection failed
when some of the elements in an SCC terminated normally (being
for example list comprehensions or other generic anonymous
functions that were included in the SCC). This patch fixes that.
|
|
* sa/dialyzer-invalid-spec-fix:
Fix crash related with the contract blame assignment patch
OTP-9219
|
|
The relevant commit is 8342fcf5395133a19d647f2ace606af9b7fc1732.
The old patch could emit warnings even for function that had a
problematic spec even without refinement. This warnings would
consume the relevant invalid spec warnings. This patch takes
care of this by ensuring that normal invalid spec messages are
emitted if the call that triggers the blame contract range
warning is in another module.
|
|
|
|
|
|
* sa/dialyzer-missing-spec:
Add spec to dialyzer_cl_parse:get_lib_dir/1
OTP-9129
|
|
|
|
Applies to the specification of the return value of a function.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* aronisstav/dialyzer/dialyzer_tests/OTP-9116:
Increase timetrap of options1 suite
Write output_plt even when plt_check is ok
Create plt with erts, kernel and stdlib only
Update test results as they currently appear in dev
Major restructure of dialyzer's testsuite
Add 'apps' option to the erlang interface
Update spec file to work with new common test structure
Test suites for Dialyzer
|
|
* sa/dialyzer-fix-guards:
Fix warnings about guards containing not
Fix errors in the handling of 'and'/'or' guards
Cosmetic changes
OTP-9099
|
|
|
|
|
|
This change adds a --fullpath option to Dialyzer, which makes the
warning messages contain the full path of the corresponding file.
Original patch submitted by Magnus Henoch (legoscia) on 15/9/2010
and cooked to death in the 'pu' branch all this time.
The patch was essentially correct and most of it has been used as
is, but there have been some changes to make the code slightly
prettier, avoid some code duplication, and add documentation to
dialyzer's doc files and to its help message.
|
|
The wording of warnings about unsatisfiable guards that used
'not' was incorrect (the 'not' was not mentioned and it appeared
as "Guard test is_atom(atom()) can never succeed").
|
|
Apart from the obvious bug in the negative evaluation of an 'and'
guard, Dialyzer handled dont_know cases rather single-mindedly
towards the positive branch. This patch allows for negative results
as well and does some clever guesses to narrow them down. It was
constructed similarly to the handling of the 'not' guard.
|
|
|
|
Dialyzer had a minor issue when the arguments of the built-in function
'or' had the fixed value 'false'.
This testcase should return no warnings:
-module(false_false).
-export([false_or/0]).
false_or() ->
false or false.
|
|
|
|
This new feature is able to take multiple PLTs, merge them during the
start of the analysis, and work from there. This works provided that
the PLTs do not have a module with the same name appearing in more
than one PLT.
The PLTs are created in the usual way:
dialyzer --build_plt --output_plt PLT_1 FILES_TO_INCLUDE
...
dialyzer --build_plt --output_plt PLT_N FILES_TO_INCLUDE
and then can be used in either of the following ways:
dialyzer FILES_TO_ANALYZE --plts PLT_1 ... PLT_N
or:
dialyzer --plts PLT_1 ... PLT_N -- FILES_TO_ANALYZE
(Note the -- delimiter in the second case)
|
|
|
|
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.
|
|
|
|
* ks/fix-dialyzer_plt-spec:
Dialyzer: Fix erroneous type and use the same definition in two places
|
|
|
|
Changes which fix some problems reported by dialyzer users:
1. The handling of nested opaque types
2. The handling of remote types in record expressions used as types
While at it, updated dialyzer's RELEASE_NOTES to reflect these fixes
and did some cleanups to dialyzer_utils.erl so that it gets in sync
with dialyzer's main development branch.
|
|
|
|
Bumped version number and wrote RELEASE_NOTES.
Included all changes described in release notes.
Some spec-related changes to some files in lib/hipe/cerl.
|
|
In commit 1858cb81391d2bce29b4b7620574ca60128cebf7, erl_expand_records
started to optimize is_record/2 in guards by replacing it with
pattern matching (if possible).
Unfortunately, dialyzer will no longer see the code before the
optimization, so any warnings produced in code such as:
case ExprNotProducingRecord#rec{} of
X when is_record(X, rec, N) -> ...
will refer to the optimized code and not the source code,
which is confusing for the user.
Introduce the no_is_record_optimization option for turning off
the optimization and use it in dialyzer.
Reported-by: Kostis Sagonas
|
|
|
|
|
|
|
|
|
|
* ks/hipe:
dialyzer: Fix system_limit exception in race analysis
syntax_tools: Add types and specs for most exported functions
syntax_tools: Support the --enable-native-libs configure option
syntax_tools: Remove $Id$ annotations
dialyzer: New version for the R13B04 release
hipe: Miscellaneous additions
typer: New version for the R13B04 release
Fix a HiPE compiler bug evaluating an expression that throws system_limit
OTP-8460 ks/hipe
|
|
dialyzer_callgraph:
Avoid creation of too many ets tables by the race analysis.
dialyzer_dataflow:
The digraph returned by the race analysis should not be the
translated one.
|