Age | Commit message (Collapse) | Author | |
---|---|---|---|
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-20 | Merge PR-1632 from margnus1/hipe-receive-opt OTP-14785 | Sverker Eriksson | |
HiPE: Optimise receives matching unique references | |||
2017-11-20 | Merge branch 'maint' | Lukas Larsson | |
2017-11-20 | Merge branch 'lukas/docs/xmllint_fixes/OTP-14721' into maint | Lukas Larsson | |
* lukas/docs/xmllint_fixes/OTP-14721: ssl/ssh: Remove/ignore unused XML_FILES doc files Refactor xmllint check and make it fail on failure Add toplevel xmllint make target Conflicts: lib/crypto/doc/src/Makefile | |||
2017-11-20 | Merge 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-20 | erts: Implement batching maps:iterator | Lukas Larsson | |
This iterator implementation fetches multiple elements to iterate over in one call to erts_internal:maps_next instead of one at a time. This means that the memory usage will go up for the iterator as we are buffering elements, but the usage is still bounded. In this implementation the max memory usage is 1000 words. Using this approach makes the iterator as fast as using maps:to_list, so maps:iterator/2 has been removed. | |||
2017-11-16 | HiPE: Unique ref receive opt | Magnus Lång | |
2017-11-15 | Merge PR-1621 from margnus1/hipe-literal-tag | Sverker Eriksson | |
HiPE: Support for literal tag, tests and bugfixes | |||
2017-11-09 | Merge branch 'maint' | Sverker Eriksson | |
2017-11-09 | Merge PR-1618 from sverker/sverker/hipe-doc-limitations OTP-14767 | Sverker Eriksson | |
Document HiPE limitations | |||
2017-11-06 | Clearify call trace limitations. | Sverker Eriksson | |
2017-11-05 | HiPE: Support literal tags | Magnus Lång | |
Literal tags are used by the VM as an alternative to reserving a large virtual memory space in order to be able to quickly identify which terms are literals. The use of literal tags harms performance, but is useful to support systems where allocating a large amount of virtual memory is not an option. | |||
2017-11-05 | HiPE: Verify GC safety of derived values | Magnus Lång | |
HiPE has had metadata for gc safety on it's temporaries for a while, but it has never been enforced or even checked, so naturally several gc-safety violations has slipped through. A new pass, hipe_rtl_verify_gcsafe verifies gcsafety on optimised RTL and is used when running the testsuite, and can be manually enabled with +{hipe,[verify_gcsafe]}. | |||
2017-11-05 | HiPE: Make is_divisible a primop | Magnus Lång | |
Since gcunsafe values are live over is_divisible calls (although only the happy path, which never GCd), it should be a primop so there cannot be any GCs. | |||
2017-11-05 | hipe_rtl_lcm: Fix another bug | Magnus Lång | |
During deletion, the killing of expressions was not considered. | |||
2017-11-05 | hipe_rtl_lcm: Fix Lazy Code Motion bug | Magnus Lång | |
The lazy code motion optimisation pass could violate its guarantees eliminating partial redundancy by moving an expression to before a call instruction. | |||
2017-11-03 | Removed "unused list comprehensions" | Sverker Eriksson | |
which don't seem to be true. | |||
2017-11-03 | Merge branch 'maint' | Sverker Eriksson | |
2017-11-03 | Merge PR-1607 from sverker/hipe_bin_utf32_bug OTP-14740 | Sverker Eriksson | |
Fix hipe bug in binary <<X/utf32>> construction | |||
2017-11-03 | Fix bug in hipe for <<X/utf32>> | Sverker Eriksson | |
by introducing new primop 'is_unicode' with no exception (ab)use and no GC. Replaces bs_validate_unicode which is kept for backward compat for now. | |||
2017-11-02 | hipe: Add doc sections about limitations | Sverker Eriksson | |
2017-10-31 | Refactor xmllint check and make it fail on failure | Lukas Larsson | |
This commit also adds a check to see that all files that are part of an xi:include also have part of XML_FILES and vice versa. It also fixes any applications where this was not true. | |||
2017-10-13 | Merge pull request #1596 from bjorng/bjorn/enhance-try-catch | Björn Gustavsson | |
(Slightly) optimize catch and try/catch OTP-14683 | |||
2017-10-11 | Optimize try/catch that ignores the return value | Björn Gustavsson | |
If a try/catch is used to ignore the potential exception caused by some expression with a side effect such as: try side_effect() catch _Class:_Reason -> ok end, . . . the generated code will be wasteful: try YReg TryLabel %% call side_effect() here try_end Yreg jump GoodLabel TryLabel: try_case YReg %% try_case has set up registers as follows: %% x(0) -> error | exit | throw %% x(1) -> reason %% x(2) -> raw stack trace data GoodLabel: %% This code does not use any x registers. There will be two code paths that both end up at GoodLabel, and the try_case instruction will set up registers that are never used. We can do better by replacing try_case with try_end to obtain this code: try YReg TryLabel %% call side_effect() here try_end Yreg jump GoodLabel TryLabel: try_end YReg GoodLabel: The jump optimizer (beam_jump) can further optimize this code like this: try YReg TryLabel %% call side_effect() here TryLabel: try_end YReg | |||
2017-10-11 | hipe: Extend the basic_SUITE with one more test | Kostis Sagonas | |
that checks the construction of exception information. The test is taken from the compiler SUITE but part of it (the one that constructs exceptions which differ between BEAM and HiPE) is commented out. Related to the discussion of #1596. | |||
2017-10-10 | Merge branch 'maint' | Lars Thorsen | |
2017-10-10 | Merge branch 'lars/doc-cleanup/OTP-14475' into maint | Lars Thorsen | |
* lars/doc-cleanup/OTP-14475: [edoc] Remove unused module otpsgml_layout.erl Remove unused files from the documentation build | |||
2017-09-28 | Remove unused files from the documentation build | Lars Thorsen | |
2017-09-26 | Merge branch 'maint' | Henrik Nord | |
2017-09-22 | Update release notes | Erlang/OTP | |
2017-09-22 | Update version numbers | Erlang/OTP | |
2017-09-20 | Merge branch 'maint' | Dan Gudmundsson | |
* maint: erts, stdlib: Fix xmllint warning Update runtime deps to depend on new stdlib functionality | |||
2017-09-19 | Update runtime deps to depend on new stdlib functionality | Dan Gudmundsson | |
~tw and new string functions are new since OTP-20 (stdlib-3.4) | |||
2017-09-18 | Merge 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 | |||
2017-09-18 | Merge branch 'hasse/dialyzer/map_fixes/OTP-14572' into maint | Hans Bolinder | |
* hasse/dialyzer/map_fixes/OTP-14572: 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 | |||
2017-09-15 | Merge branch 'siri/string-new-api' | Siri Hansen | |
* siri/string-new-api: (28 commits) hipe (test): Do not use deprecated functions in string(3) dialyzer (test): Do not use deprecated functions in string(3) eunit (test): Do not use deprecated functions in string(3) system (test): Do not use deprecated functions in string(3) system (test): Do not use deprecated functions in string(3) mnesia (test): Do not use deprecated functions in string(3) Deprecate old string functions observer: Do not use deprecated functions in string(3) common_test: Do not use deprecated functions in string(3) eldap: Do not use deprecated functions in string(3) et: Do not use deprecated functions in string(3) os_mon: Do not use deprecated functions in string(3) debugger: Do not use deprecated functions in string(3) runtime_tools: Do not use deprecated functions in string(3) asn1: Do not use deprecated functions in string(3) compiler: Do not use deprecated functions in string(3) sasl: Do not use deprecated functions in string(3) reltool: Do not use deprecated functions in string(3) kernel: Do not use deprecated functions in string(3) hipe: Do not use deprecated functions in string(3) ... Conflicts: lib/eunit/src/eunit_lib.erl lib/observer/src/crashdump_viewer.erl lib/reltool/src/reltool_target.erl | |||
2017-09-15 | hipe (test): Do not use deprecated functions in string(3) | Dan Gudmundsson | |
2017-09-15 | dialyzer: Improve check of unknown types | Hans Bolinder | |
The implementation of OTP-14218 (commit 6d3b38a) has a weakness: only a very limited part of the type form is checked. This is now fixed: types not used by specs are checked equally well as types used by specs. The new function erl_types:t_from_form_check_remote() checks usage of remote types. It does not expand used local types, and has (almost) no limits on depth and size. | |||
2017-09-12 | dialyzer: Modify handling of singleton map key types | Hans Bolinder | |
The test case loop.erl shows that there is a problem with certain singleton key types. Here the internal representation toggles between #{a | b => ...} and #{a => ..., b => ...} The choice is to turn #{a | b => ...} into #{a => ..., b => ...} early (t_from_form()). The aim is to keep as much info as possible (in pairs). However, including complex singleton keys (tuples, maps) in this scheme is potentially too costly, and a bit complicated. So one more choice is made: let atoms and number (and nothing else) be singleton types, and let complex keys go into the default key. | |||
2017-09-12 | Dialyzer: Rewrite one map type invariant | Hans Bolinder | |
2017-09-05 | hipe: Improve handling of Unicode | Hans Bolinder | |
2017-07-06 | hipe: Do not use deprecated functions in string(3) | Hans Bolinder | |
Should probably be left for the HiPE team to fix | |||
2017-07-06 | hipe: erl_types: Do not use deprecated functions in string(3) | Hans Bolinder | |
2017-06-21 | Prepare release | Erlang/OTP | |
2017-06-13 | hipe: Remove 'undefined' from a record field's type | Hans Bolinder | |