aboutsummaryrefslogtreecommitdiffstats
path: root/lib/dialyzer/test
AgeCommit message (Collapse)Author
2019-04-10Merge branch 'hasse/dialyzer/improve_binary_printing/OTP-15752'Hans Bolinder
* hasse/dialyzer/improve_binary_printing/OTP-15752: dialyzer: Fix pretty printing of binaries
2019-04-10Merge pull request #2197 from lbolla/spelling-mistakes-fixBjörn Gustavsson
Fix various spelling mistakes
2019-04-08dialyzer: Fix pretty printing of binariesHans Bolinder
Notice the comment in dialyzer_utils: %% Copied from core_pp. The function cerl:binary_segments/2 should/could %% be extended to handle literals, but then the cerl module cannot be %% HiPE-compiled as of Erlang/OTP 22.0 (due to <<I:N>>). When at it: simplify some common cases like "/binary-unit:8".
2019-03-31Fix various spelling mistakesLorenzo Bolla
Fix ERL-541 and various other unreported spelling mistakes.
2019-02-25Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix maps as parameter of opaque types dialyzer: Fix key check of lists:key{search,member,find}()
2019-02-21dialyzer: Fix maps as parameter of opaque typesHans Bolinder
The clause added for maps in commit 1a7c41be is corrected.
2019-02-21dialyzer: Fix key check of lists:key{search,member,find}()Hans Bolinder
Replace integers and floats with t_number() since keysearch et al compare the key (rather than match). Corrects the commit b3c8e94.
2019-02-19Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix a bug regarding contracts
2019-02-19Merge branch 'hasse/dialyzer/fix_contract_check/OTP-15562/ERL-845' into maintHans Bolinder
* hasse/dialyzer/fix_contract_check/OTP-15562/ERL-845: dialyzer: Fix a bug regarding contracts
2019-02-11Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix a bug affecting keyfind/keysearch/keymember
2019-02-08dialyzer: Fix a bug affecting keyfind/keysearch/keymemberHans Bolinder
2019-02-06dialyzer: Fix a bug regarding contractsHans Bolinder
See also https://bugs.erlang.org/browse/ERL-845. Fix a bug that caused Dialyzer to crash when analyzing a contract with a module name differing from the analyzed module's name. The bug was introduced in Erlang/OTP 18.
2018-08-31Merge pull request #1944 from ↵Hans Bolinder
uabboli/hasse/dialyzer/improve_guards/OTP-15268/ERL-680 dialyzer: Improve handling of complex guards
2018-08-28dialyzer: Improve handling of complex guardsHans Bolinder
See also https://bugs.erlang.org/browse/ERL-680. The right associative short circuit expressions 'andalso' and 'orelse' are expanded by the Compiler (see v3_core) into 'case' expressions. If parentheses are used to enforce left associativeness, variables are introduced, and the time needed by Dialyzer increases exponentially. Rather than trying to fix Dialyzer itself, v3_core now rewrites repeated use of 'andalso' ('orelse') into right associative expressions before creating the 'case' expressions.
2018-07-27Change "can not" into "cannot"Raimo Niskanen
I did not find any legitimate use of "can not", however skipped changing e.g RFCs archived in the source tree.
2018-07-23Refine types of functions in maps moduleMichał Muskała
This only touches functions that are not further manually enhanced in erl_bif_types. The hope is that this will allow dialyzer to discover more issues in code using maps.
2018-06-07stdlib: Move eval_str/1 from mod_esi to erl_evalHans Bolinder
See also https://bugs.erlang.org/browse/ERL-634. The utility program `erl_call' in erl_interface used to call lib:eval_str/1, which is no longer present in Erlang/OTP 21.0. The lib module was eliminated in OTP-15072, see also https://github.com/erlang/otp/pull/1786.
2018-05-25dialyzer: Refine the test for overspecified functionsHans Bolinder
The -Woverspecs (-Wspecdiffs) option generates warnings in a few more cases. The refinement is analogous to the test that -Wunderspecs already does: it checks if the contract has nothing in common with some element (see erl_types:t_elements/1) of the success typing.
2018-05-21Merge branch 'hasse/dialyzer/funs_in_dead_code/OTP-15079/ERL-593'Hans Bolinder
* hasse/dialyzer/funs_in_dead_code/OTP-15079/ERL-593: dialyzer: Do not emit warnings for unreachable funs
2018-05-13dialyzer: Do not emit warnings for unreachable funsHans Bolinder
Warnings are not generated for funs residing in dead code. In particular, warnings like "The created fun has no local return" are no longer generated for funs declared in clauses or functions that cannot be run.
2018-05-09Fix minor issuesRichard Carlsson
2018-05-04Use \n escape instead of integer 10Richard Carlsson
2018-05-04Move lib:eval_str/1 into mod_esi.erlRichard Carlsson
2018-05-04Move lib:nonl/1 into yecc.erlRichard Carlsson
2018-03-24Avoid overflowing the atom tableBjörn Gustavsson
Use integer variable names instead of atoms in v3_core, sys_core_fold, and v3_kernel to avoid overflowing the atom table. It is a deliberate design decision to calculate the first free integer variable name (in sys_core_fold and v3_kernel) instead of somehow passing it from one pass to another. I don't want that kind of dependency between compiler passes. Also note that the next free variable name is not easily available after running the inliner.
2018-03-16mikpe/process_info-1-no-messages/PR-1745/OTP-14986Lukas Larsson
make erlang:process_info/1 not retrieve messages
2018-03-13Merge branch 'hasse/dialyzer/extra-range/OTP-14970'Hans Bolinder
* hasse/dialyzer/extra-range/OTP-14970: ssl: Correct some specs os_mon: Correct a spec Fix broken spec in beam_asm Dialyzer should not throw away spec information because of overspec
2018-03-10make erlang:process_info/1 not retrieve messagesMikael Pettersson
process_info/1 retrieves a number of properties related to a process, including the list of messages in its mailbox. This is potentially unsafe if the target process has a large number of queued messages: - there is no a priori upper bound on the amount of memory being allocated to hold that list, and - the loop to retrieve the messages is uninterruptible, so the Erlang scheduler where this executes blocks for the duration We've seen process_info/1 bring down heavily loaded nodes on more than one occasion. At least once it appeared to have blocked the Erlang heart process from executing, causing the external heart to kill the VM. Consequently this removes 'messages' from the list of process_info tags to retrieve for process_info/1. Note that process_info/1 still retrieves 'message_queue_len', and process_info/2 can still retrieve 'messages' when asked to. A few places in the OTP libraries need minor adjustments, since they want 'message_queue_len' but compute it from the length of the list of messages.
2018-02-23Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Correct a parameterized opaque types bug
2018-02-21dialyzer: Correct a parameterized opaque types bugHans Bolinder
See also https://bugs.erlang.org/browse/ERL-565. To avoid loops, erl_types:t_is_subtype checks for equality using unopaqued types, but in (at least) one case something is lost: This fix makes sure that when forwarding arguments in dataflow, types with different parameters but equal when unopaqued are considered different. For example, dict:dict(0, {}) and dict:dict(0, []) are equal when unopaqued (due to how dict(_, _) is declared in module dict), but should be considered different when forwarding args.
2018-02-20Dialyzer should not throw away spec information because of overspecRichard Carlsson
2018-02-15Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix a crash
2018-02-14dialyzer: Fix a crashHans Bolinder
2018-02-07Merge branch 'hasse/no_get_stacktrace/OTP-14861'Hans Bolinder
* hasse/no_get_stacktrace/OTP-14861: erts: Update abstract format doc with stacktrace variable wx: Do not call erlang:get_stacktrace() tools: Do not call erlang:get_stacktrace() stdlib: Do not call erlang:get_stacktrace() sasl: Do not call erlang:get_stacktrace() runtime_tools: Do not call erlang:get_stacktrace() reltool: Do not call erlang:get_stacktrace() parsetools: Do not call erlang:get_stacktrace() observer: Do not call erlang:get_stacktrace() mnesia: Do not call erlang:get_stacktrace() (cont) mnesia: Do not call erlang:get_stacktrace() kernel: Do not call erlang:get_stacktrace() inets: Do not call erlang:get_stacktrace() eunit: Do not call erlang:get_stacktrace() et: Do not call erlang:get_stacktrace() dialyzer: Do not call erlang:get_stacktrace() debugger: Do not call erlang:get_stacktrace() debugger: Do not try to restore stacktrace common_test: Do not call erlang:get_stacktrace()
2018-02-06dialyzer: Assign a type to the primop build_stacktraceHans Bolinder
2018-02-05dialyzer: Do not call erlang:get_stacktrace()Hans Bolinder
2018-01-19Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Fix bsl/2 bug
2018-01-12dialyzer: Fix bsl/2 bugHans Bolinder
Also modified erl_bif_types:infinity_bsl() when called with zero as first argument. As of writing this, erlang:'bsl'/2 is modified on the master branch to never fail if called with a huge second argument.
2018-01-10Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Add a test of erl_tar:table/1,2 Fix false Dialyzer warnings for erl_tar:table/1
2018-01-09dialyzer: Add a test of erl_tar:table/1,2Hans Bolinder
2018-01-09Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Correct handling of erlang:abs/1
2018-01-08dialyzer: Correct handling of erlang:abs/1Hans Bolinder
See also https://bugs.erlang.org/browse/ERL-551.
2017-11-28Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Extend the map implementation's handling of ?unit dialyzer: Use string:find() instead of string:str()
2017-11-22dialyzer: Extend the map implementation's handling of ?unitHans Bolinder
The Maps implementation handles ?unit in more cases. Exactly when t_is_none_or_unit() is to be called is not clear to me. The added cases are about a map type being ?unit, but the key or the value of an association can also be ?unit, but that is not always checked.
2017-11-22dialyzer: Use string:find() instead of string:str()Hans Bolinder
2017-11-20Merge branch 'lukas/stdlib/maps_iterators/OTP-14012'Lukas Larsson
* lukas/stdlib/maps_iterators/OTP-14012: erts: Limit size of first iterator for hashmaps Update primary bootstrap Update preloaded modules erts: Remove erts_internal:maps_to_list/2 stdlib: Make io_lib and io_lib_pretty use maps iterator erts: Implement batching maps:iterator erts: Implement maps path iterator erts: Implement map iterator using a stack stdlib: Introduce maps iterator API Conflicts: bootstrap/lib/stdlib/ebin/io_lib.beam bootstrap/lib/stdlib/ebin/io_lib_pretty.beam erts/emulator/beam/bif.tab erts/preloaded/ebin/erlang.beam erts/preloaded/ebin/erts_internal.beam erts/preloaded/ebin/zlib.beam
2017-11-14Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Display error messages without call stack
2017-11-10dialyzer: Display error messages without call stackHans Bolinder
As of commit 12b379 many of the reasons displayed after "Analysis failed with error:" erroneously include a call stack. The bug is now corrected. The bug was pointed out in http://erlang.org/pipermail/erlang-questions/2017-October/093838.html.
2017-10-13erts: Implement maps path iteratorLukas Larsson
2017-09-18Merge branch 'maint'Hans Bolinder
* maint: dialyzer: Adjust a test case dialyzer: Modify handling of singleton map key types Dialyzer: Rewrite one map type invariant Dialyzer: Rewrite some of the docs of map types