Age | Commit message (Collapse) | Author | |
---|---|---|---|
2018-12-12 | Add empty 'since' attribute for old modules and functions | Sverker Eriksson | |
2018-09-24 | Prepare release | Erlang/OTP | |
2018-08-28 | dialyzer: Improve handling of complex guards | Hans 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-13 | docs: make clean all XMLDIR | Lukas Larsson | |
2018-06-19 | Prepare release | Erlang/OTP | |
2018-06-18 | Update copyright year | Henrik Nord | |
2018-06-07 | stdlib: Move eval_str/1 from mod_esi to erl_eval | Hans 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-25 | dialyzer: Refine the test for overspecified functions | Hans 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-21 | Merge 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-13 | dialyzer: Do not emit warnings for unreachable funs | Hans 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-09 | Fix minor issues | Richard Carlsson | |
2018-05-04 | Use \n escape instead of integer 10 | Richard Carlsson | |
2018-05-04 | Move lib:eval_str/1 into mod_esi.erl | Richard Carlsson | |
2018-05-04 | Move lib:nonl/1 into yecc.erl | Richard Carlsson | |
2018-05-02 | Revert "Update release notes" | Henrik | |
This reverts commit 202bb737e3deabfebee683266f4b7c42781eb521. | |||
2018-05-02 | Revert "Update version numbers" | Henrik | |
This reverts commit 345f7f527a4c26ef49cef0d81e2c8b71bf01ebc3. | |||
2018-04-30 | Update release notes | Erlang/OTP | |
2018-04-30 | Update version numbers | Erlang/OTP | |
2018-03-24 | Avoid overflowing the atom table | Bjö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-16 | mikpe/process_info-1-no-messages/PR-1745/OTP-14986 | Lukas Larsson | |
make erlang:process_info/1 not retrieve messages | |||
2018-03-14 | Merge branch 'maint' | Henrik | |
Conflicts: OTP_VERSION | |||
2018-03-13 | Merge 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-10 | make erlang:process_info/1 not retrieve messages | Mikael 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-03-09 | Update release notes | Erlang/OTP | |
2018-03-09 | Update version numbers | Erlang/OTP | |
2018-02-26 | Merge pull request #1719 from josevalim/jv-faster-dialyzer-md5 | Hans Bolinder | |
dialyzer: Compute MD5s using the .beam file (OTP-14937) | |||
2018-02-23 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Correct a parameterized opaque types bug | |||
2018-02-21 | Compute MD5s in dialyzer using the .beam file | José Valim | |
The previous mechanism was based on the core file which meant that for every module in the PLT, we had to fetch its .beam file, retrieve Erlang AST, compile that down to core, serialize it into a binary and then get its MD5. In a project with stdlib, kernel, elixir and a small application in the PLT, relying only on the .beam sped up --check_plt from 10s to 0.8s. | |||
2018-02-21 | dialyzer: Correct a parameterized opaque types bug | Hans 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-20 | Dialyzer should not throw away spec information because of overspec | Richard Carlsson | |
2018-02-15 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Fix a crash | |||
2018-02-14 | dialyzer: Fix a crash | Hans Bolinder | |
2018-02-07 | Merge 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-06 | dialyzer: Assign a type to the primop build_stacktrace | Hans Bolinder | |
2018-02-05 | dialyzer: Do not call erlang:get_stacktrace() | Hans Bolinder | |
2018-01-23 | Merge branch 'maint' | Hans Bolinder | |
* maint: kernel: Correct contracts and a bug in group_history stdlib: Correct contracts dialyzer: Optimize handling of a lot of warnings Conflicts: lib/kernel/src/erl_boot_server.erl | |||
2018-01-22 | dialyzer: Optimize handling of a lot of warnings | Hans Bolinder | |
If the number of warnings is huge the '--'/2 operator is slow. | |||
2018-01-19 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Fix bsl/2 bug | |||
2018-01-12 | dialyzer: Fix bsl/2 bug | Hans 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-10 | Merge 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-09 | dialyzer: Add a test of erl_tar:table/1,2 | Hans Bolinder | |
2018-01-09 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Correct handling of erlang:abs/1 | |||
2018-01-08 | dialyzer: Correct handling of erlang:abs/1 | Hans Bolinder | |
See also https://bugs.erlang.org/browse/ERL-551. | |||
2017-12-13 | Merge branch 'maint' | Henrik Nord | |
2017-12-08 | Update release notes | Erlang/OTP | |
2017-12-08 | Update version numbers | Erlang/OTP | |
2017-11-30 | Add syntax in try/catch to retrieve the stacktrace directly | Björn Gustavsson | |
This commit adds a new syntax for retrieving the stacktrace without calling erlang:get_stacktrace/0. That allow us to deprecate erlang:get_stacktrace/0 and ultimately remove it. The problem with erlang:get_stacktrace/0 is that it can keep huge terms in a process for an indefinite time after an exception. The stacktrace can be huge after a 'function_clause' exception or a failed call to a BIF or operator, because the arguments for the call will be included in the stacktrace. For example: 1> catch abs(lists:seq(1, 1000)). {'EXIT',{badarg,[{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]}} 2> erlang:get_stacktrace(). [{erlang,abs, [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23,24|...]], []}, {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,674}]}, {erl_eval,expr,5,[{file,"erl_eval.erl"},{line,431}]}, {shell,exprs,7,[{file,"shell.erl"},{line,687}]}, {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}] 3> We can extend the syntax for clauses in try/catch to optionally bind the stacktrace to a variable. Here is an example using the current syntax: try Expr catch C:E -> Stk = erlang:get_stacktrace(), . . . In the new syntax, it would look like: try Expr catch C:E:Stk -> . . . Only a variable (not a pattern) is allowed in the stacktrace position, to discourage matching of the stacktrace. (Matching would also be expensive, because the raw format of the stacktrace would have to be converted to the cooked form before matching.) Note that: try Expr catch E -> . . . is a shorthand for: try Expr catch throw:E -> . . . If the stacktrace is to be retrieved for a throw, the 'throw:' prefix must be explicitly included: try Expr catch throw:E:Stk -> . . . | |||
2017-11-28 | Merge branch 'maint' | Hans Bolinder | |
* maint: dialyzer: Extend the map implementation's handling of ?unit dialyzer: Use string:find() instead of string:str() | |||
2017-11-22 | dialyzer: Extend the map implementation's handling of ?unit | Hans 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-22 | dialyzer: Use string:find() instead of string:str() | Hans Bolinder | |