aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2016-05-16Eliminate crash in beam_boolBjörn Gustavsson
beam_bool would crash when attempting to optimize BEAM code similar to this code: bif '=:=' Reg1 SomeValue => y(0) bif '=:=' Reg2 {atom,true} => x(2) bif '=:=' Reg3 {atom,true} => x(3) bif 'or' x(2) x(3) => x(2) is_eq_exact Fail x(2) {atom,true} The problem is that the first instruction that assigns a value to a Y register. beam_bool:ssa_assign/2 will not accept a Y register argument. We could change ssa_assign/2 to accept a Y register, but that would only cause the entire optimization to be rejected later because the Y register is alive in the code that follows. Therefore, a better solution is to modify extend_block/3 so that the instruction that assign to Y registers are not added to the block. That is, the optimizer will only operate on the following code: bif '=:=' Reg2 {atom,true} => x(2) bif '=:=' Reg3 {atom,true} => x(3) bif 'or' x(2) x(3) => x(2) is_eq_exact Fail x(2) {atom,true} Usually the optimization will succeed, rewriting the four instructions to a select_val instruction. Assembly code such as the above can be produced by code similar to: Y = Something == SomethingElse, case Y of Condition; OtherCondition -> . . . end, . . ., Y. Reported-by: http://bugs.erlang.org/browse/ERL-143 Reported-by: José Valim
2016-05-16Add beam_bool_SUITEBjörn Gustavsson
It's time that we have a dedicated test suite for beam_bool.
2016-05-16Add missing test cases in andor_SUITE and beam_block_SUITEBjörn Gustavsson
Two test cases were not actually run. Even if their main purpose is to ensure that the compiler doesn't crash, we always try to also run the test case (when practial) to also ensure that the generated code is correct.
2016-05-13Merge branch 'egil/erts/nif-format_term/OTP-13580'Björn-Egil Dahlberg
* egil/erts/nif-format_term/OTP-13580: runtime_tools: Change erts_snprintf to enif_snprintf erts: Document enif_snprintf erts: Add tests for enif_snprintf erts: Add enif_snprintf Conflicts: erts/emulator/beam/erl_nif_api_funcs.h
2016-05-13Merge branch 'egil/tools/fix-unmatched_return/OTP-13595'Björn-Egil Dahlberg
* egil/tools/fix-unmatched_return/OTP-13595: xref: Fix unmatched return warnings tags: Fix unmatched return warnings lcnt: Fix unmatched return warnings fprof: Fix unmatched return warnings fprof: Fix unmatched return warnings eprof: Fix unmatched return warnings cover: Fix unmatched return warnings
2016-05-13Merge branch 'egil/runtime_tools/fix-unmatched_return/OTP-13595'Björn-Egil Dahlberg
* egil/runtime_tools/fix-unmatched_return/OTP-13595: runtime_tools: Fix unmatched return warnings
2016-05-13Merge branch 'egil/os_mon/fix-unmatched_return/OTP-13595'Björn-Egil Dahlberg
* egil/os_mon/fix-unmatched_return/OTP-13595: os_mon: Fix unmatched return warnings
2016-05-13Merge branch 'egil/et/fix-doc-lint'Björn-Egil Dahlberg
* egil/et/fix-doc-lint: et: Fix linting documentation xml tags
2016-05-13Merge branch 'egil/runtime_tools/fix-doc-lint'Björn-Egil Dahlberg
* egil/runtime_tools/fix-doc-lint: runtime_tools: Fix tags of dbg reference manual runtime_tools: Fix tags of LTTng User's Guide
2016-05-13Merge branch 'egil/percept/fix-ug-doc'Björn-Egil Dahlberg
* egil/percept/fix-ug-doc: egd: Fix User's Guide lint
2016-05-13Merge branch 'bjorn/asn1/dialyzer-warnings/OTP-13579'Björn Gustavsson
* bjorn/asn1/dialyzer-warnings/OTP-13579: Eliminate dialyzer warnings for unmatched returns
2016-05-13Merge branch 'bjorn/common_test/dialyzer-warnings'Björn Gustavsson
* bjorn/common_test/dialyzer-warnings: ct_logs: Eliminate dialyzer warnings
2016-05-13Merge branch 'mururu/stdlib/fix-deprecated-warnings/PR-1050/OTP-13594'Björn Gustavsson
* mururu/stdlib/fix-deprecated-warnings/PR-1050/OTP-13594: Fix deprecated warnings
2016-05-13Merge branch 'bjorn/compiler/badfun-literal/ERL-138/OTP-13552'Björn Gustavsson
* bjorn/compiler/badfun-literal/ERL-138/OTP-13552: sys_core_fold: Don't generated failing calls such as 3(4) fun_SUITE: Test for failing calls to funs
2016-05-13Update application versionsHans Bolinder
2016-05-13Use the newly defined types in a record declarationKostis Sagonas
2016-05-13Strengthen the spec of analyze/1Kostis Sagonas
2016-05-13Fix dependency calculation when encountering an erroneous 'apply'Kostis Sagonas
Dialyzer's dependency calculation was throwing an error when encountering an 'apply' node with something that was not a variable (e.g., a literal). The rest of the code did not know what to do with this error, which resulted in dialyzer crashing. Fix this by ingoring the detected error in the dependency calculation phase; later dialyzer passes know how to properly handle and report this kind of errors anyway. This fixes [Erlang-JIRA] (ERL-138).
2016-05-13[reltool] Correct documentationHans Bolinder
Fix mistakes found by 'xmllint'.
2016-05-13[syntax_tools] Correct documentationHans Bolinder
Fix mistakes found by 'xmllint'.
2016-05-12et: Fix linting documentation xml tagsBjörn-Egil Dahlberg
2016-05-12runtime_tools: Fix tags of dbg reference manualBjörn-Egil Dahlberg
2016-05-12runtime_tools: Fix tags of LTTng User's GuideBjörn-Egil Dahlberg
2016-05-12egd: Fix User's Guide lintBjörn-Egil Dahlberg
2016-05-12sys_core_fold: Don't generated failing calls such as 3(4)Björn Gustavsson
Rewrite code such as: X = not_a_fun, X() to: error({badfun,not_a_fun}) Also generate a warning.
2016-05-12fun_SUITE: Test for failing calls to funsBjörn Gustavsson
2016-05-12runtime_tools: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-12Revert "Prepare release"Erlang/OTP
This reverts commit bd64ad8e15d66e48b36dbe3584315dd5cfc8b59a.
2016-05-12Eliminate dialyzer warnings for unmatched returnsBjörn Gustavsson
Dialyzer complains that three calls to gen_dec_line/7 ignore the return value. It turns out that when the last argument to gen_dec_line/7 is 'false', the return value will always be {[],[]}. Introduce gen_dec_line/6 as helper to make it clear that we don't ignore a useful return value.
2016-05-11runtime_tools: Change erts_snprintf to enif_snprintfBjörn-Egil Dahlberg
2016-05-11Prepare releaseErlang/OTP
2016-05-11Merge branch 'ingela/ssl/test-cuddle' into masterErlang/OTP
* ingela/ssl/test-cuddle: ssl: Correct test suite
2016-05-11Merge branch 'raimo/polish-gen_statem/OTP-13065'Raimo Niskanen
* raimo/polish-gen_statem/OTP-13065: Reword 'dispatch' into 'branch depending'
2016-05-11Reword 'dispatch' into 'branch depending'Raimo Niskanen
2016-05-11Merge branch 'lukas/erts/max_heap_size/OTP-13174'Lukas Larsson
* lukas/erts/max_heap_size/OTP-13174: erts: Fix max heap size exit when in hipe mode Update preloaded modules erts: Fix pre-bif yield current_function erts: Implement max_heap_size process flag
2016-05-10xref: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10tags: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10lcnt: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10fprof: Fix unmatched return warningsBjörn-Egil Dahlberg
The return value of trace_clock is never used, return 'ok' instead.
2016-05-10fprof: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10eprof: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10cover: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10ssl: Correct test suiteIngela Anderton Andin
2016-05-10Merge branch 'anders/diameter/19.0-rc1/OTP-12913'Anders Svensson
* anders/diameter/19.0-rc1/OTP-12913: vsn -> 1.12 Update appup for 19.0-rc1 Update documentation for CEA/DWA/DPA Result-Code counters
2016-05-10Merge branch 'ingela/ssl/tls-1.2-available-hashsigns'Ingela Anderton Andin
* ingela/ssl/tls-1.2-available-hashsigns: ssl: ordsets:intersection/2 did not give the expected result
2016-05-10ssl: ordsets:intersection/2 did not give the expected resultIngela Anderton Andin
Turns out we can not count on the "hashsigns" sent by the client and the supported "hashigns" sets to have required properties of ordsets.
2016-05-10os_mon: Fix unmatched return warningsBjörn-Egil Dahlberg
2016-05-10ct_logs: Eliminate dialyzer warningsBjörn Gustavsson
common_test uses its own IO server that is group leader for the test case processes. By default, the IO server escapes characters with significance to HTML (e.g. '<'). In order to output HTML tags directly, the IO server must be told not to escape the output. The way to tell the IO server is to wrap the format string like this: ["$ct_html",Format] That works with common_test's own IO server, but in general not with other IO servers. Dialyzer will rightly complain that the call breaks the contract for io:format/3. To avoid the Dialyzer warning, we must obscure the wrapping of the format string. While we are at it, also refactor print_style/4 to make the code somewhat cleaner and shorter.
2016-05-10stdlib: Fix missing anchor in epp docsLukas Larsson
2016-05-10erts: Implement max_heap_size process flagLukas Larsson
The max_heap_size process flag can be used to limit the growth of a process heap by killing it before it becomes too large to handle. It is possible to set the maximum using the `erl +hmax` option, `system_flag(max_heap_size, ...)`, `spawn_opt(Fun, [{max_heap_size, ...}])` and `process_flag(max_heap_size, ...)`. It is possible to configure the behaviour of the process when the maximum heap size is reached. The process may be sent an untrappable exit signal with reason kill and/or send an error_logger message with details on the process state. A new trace event called gc_max_heap_size is also triggered for the garbage_collection trace flag when the heap grows larger than the configured size. If kill and error_logger are disabled, it is still possible to see that the maximum has been reached by doing garbage collection tracing on the process. The heap size is defined as the sum of the heap memory that the process is currently using. This includes all generational heaps, the stack, any messages that are considered to be part of the heap and any extra memory the garbage collector may need during collection. In the current implementation this means that when a process is set using on_heap message queue data mode, the messages that are in the internal message queue are counted towards this value. For off_heap, only matched messages count towards the size of the heap. For mixed, it depends on race conditions within the VM whether a message is part of the heap or not. Below is an example run of the new behaviour: Eshell V8.0 (abort with ^G) 1> f(P),P = spawn_opt(fun() -> receive ok -> ok end end, [{max_heap_size, 512}]). <0.60.0> 2> erlang:trace(P, true, [garbage_collection, procs]). 1 3> [P ! lists:duplicate(M,M) || M <- lists:seq(1,15)],ok. ok 4> =ERROR REPORT==== 26-Apr-2016::16:25:10 === Process: <0.60.0> Context: maximum heap size reached Max heap size: 512 Total heap size: 723 Kill: true Error Logger: true GC Info: [{old_heap_block_size,0}, {heap_block_size,609}, {mbuf_size,145}, {recent_size,0}, {stack_size,9}, {old_heap_size,0}, {heap_size,211}, {bin_vheap_size,0}, {bin_vheap_block_size,46422}, {bin_old_vheap_size,0}, {bin_old_vheap_block_size,46422}] flush(). Shell got {trace,<0.60.0>,gc_start, [{old_heap_block_size,0}, {heap_block_size,233}, {mbuf_size,145}, {recent_size,0}, {stack_size,9}, {old_heap_size,0}, {heap_size,211}, {bin_vheap_size,0}, {bin_vheap_block_size,46422}, {bin_old_vheap_size,0}, {bin_old_vheap_block_size,46422}]} Shell got {trace,<0.60.0>,gc_max_heap_size, [{old_heap_block_size,0}, {heap_block_size,609}, {mbuf_size,145}, {recent_size,0}, {stack_size,9}, {old_heap_size,0}, {heap_size,211}, {bin_vheap_size,0}, {bin_vheap_block_size,46422}, {bin_old_vheap_size,0}, {bin_old_vheap_block_size,46422}]} Shell got {trace,<0.60.0>,exit,killed}