Age | Commit message (Collapse) | Author | |
---|---|---|---|
2016-01-19 | Merge branch 'sverk/armata-memset-bug' into maint | Sverker Eriksson | |
* sverk/armata-memset-bug: erts: Workaround memset bug in test case | |||
2016-01-18 | Fix dirty scheduler check in handle_aux_work | Steve Vinoski | |
2016-01-18 | erts: Fix race between receive timeout and exit signal | Sverker Eriksson | |
Must re-read 'state' after seizing proc locks as other thread may have set EXITING. | |||
2016-01-18 | Merge branch 'hans/ssh/ssh_benchmark_SUITE' into maint | Hans Nilsson | |
2016-01-18 | ssh: encode/decode benchmark suites | Hans Nilsson | |
2016-01-18 | ssh: added cipher name to transfer speed report | Hans Nilsson | |
2016-01-18 | ssh: added sftp server benchmark | Hans Nilsson | |
2016-01-18 | Merge branch 'egil/improve-map-cerl-prettypr/OTP-13238' into maint | Björn-Egil Dahlberg | |
* egil/improve-map-cerl-prettypr/OTP-13238: compiler, hipe: Fix pretty printing of Core Maps hipe: Fix map pretty printing of pairs dialyzer: Update Maps tests | |||
2016-01-18 | Merge branch 'hb/edoc/fix_argument_names/OTP-13234' into maint | Hans Bolinder | |
* hb/edoc/fix_argument_names/OTP-13234: edoc: Assign correct names to list arguments | |||
2016-01-18 | edoc: Assign correct names to list arguments | Hans Bolinder | |
Bug reported by Josemic. See also ERL-63. | |||
2016-01-15 | Merge branch 'hb/dialyzer/fix_opaque_type_parms/OTP-13237' into maint | Hans Bolinder | |
* hb/dialyzer/fix_opaque_type_parms/OTP-13237: dialyzer: Correct handling of parameters of opaque types | |||
2016-01-15 | dialyzer: Correct handling of parameters of opaque types | Hans Bolinder | |
Correction of commit d57f5e. | |||
2016-01-14 | crypto: Fix bug for multiple blocks for AES-ECB | Andrew Bennett | |
2016-01-14 | Merge branch 'sverk/trace-doc-typo' into maint | Sverker Eriksson | |
* sverk/trace-doc-typo: erts: Correct faulty doc for erlang:trace/3 | |||
2016-01-14 | erts: Correct faulty doc for erlang:trace/3 | Sverker Eriksson | |
The entire MFA tuple is replaced with 0, not just Arity. | |||
2016-01-14 | compiler, hipe: Fix pretty printing of Core Maps | Björn-Egil Dahlberg | |
Literal maps could cause dialyzer to crash when pretty printing the results. Reported-by: Chris McGrath <[email protected]> | |||
2016-01-14 | hipe: Fix map pretty printing of pairs | Björn-Egil Dahlberg | |
In commit f667931e2905797ffab63e224e56eaf07f77178a the core format changed for map pairs. Let dialyzer and hipe pretty printing of maps also adhere to those changes. An Erlang map update, M#{foo := 1, bar => 2} will now be printed as: ~{ 'foo' := 1, 'bar' => 2 | M }~ | |||
2016-01-14 | dialyzer: Update Maps tests | Björn-Egil Dahlberg | |
2016-01-14 | Add documentation of '-path' flag to 'erl' | Siri Hansen | |
This flag replaces the path specified in the boot script. It has always existed, but was earlier only documented in SASL (script). | |||
2016-01-14 | Merge branch 'vinoski/dirty-sched-no-aux-work/OTP-13236' into maint | Rickard Green | |
* vinoski/dirty-sched-no-aux-work/OTP-13236: Do not allow aux work on dirty schedulers | |||
2016-01-13 | Deprecate module 'overload' in SASL | Siri Hansen | |
The module is deprected and will be removed in OTP 19. The reason is that the module is not used, and that we se no obvious use case for it. | |||
2016-01-13 | Merge branch 'bjorn/compiler/map-bug/OTP-13231' into maint | Björn Gustavsson | |
* bjorn/compiler/map-bug/OTP-13231: Fix crash when attempting to update a fun as if it were a map | |||
2016-01-13 | Merge branch 'hb/stdlib/fix_linter_no_module/OTP-13230' into maint | Hans Bolinder | |
* hb/stdlib/fix_linter_no_module/OTP-13230: stdlib: Fix linter crash due to missing -module declaration | |||
2016-01-13 | stdlib: Fix linter crash due to missing -module declaration | Hans Bolinder | |
The Erlang Code Linter no longer crashes if there is a -deprecated() attribute but no -module() declaration. See also ERL-62 at bugs.erlang.org. | |||
2016-01-13 | Merge branch 'hb/stdlib/fix_erl_eval/OTP-13228' into maint | Hans Bolinder | |
* hb/stdlib/fix_erl_eval/OTP-13228: stdlib: fix erl_eval not using non-local function handler | |||
2016-01-13 | stdlib: fix erl_eval not using non-local function handler | Hans Bolinder | |
See also ERL-32 at bugs.erlang.org. Thanks to Ben Paxton. | |||
2016-01-12 | ssl_dist_SUITE: don't use deprecated functions | Magnus Henoch | |
Use erlang:unique_integer/1 instead of erlang:now/0 to generate a unique node name. Use rand:uniform/1 instead of random:uniform/1, so we don't need to generate a seed ourselves. | |||
2016-01-12 | TLS distribution: support inet_dist_connect_options | Magnus Henoch | |
Allow adding extra options for outgoing TLS distribution connnections, as supported for plain TCP connections. | |||
2016-01-12 | Fix crash when attempting to update a fun as if it were a map | Björn Gustavsson | |
The following example would cause an internal consistency failure in the compiler: f() -> ok. update() -> (fun f/0)#{u => 42}. The reason is that internally, v3_core will (incorrectly) rewrite update/0 to code similar to this: update() -> if is_map(fun f/0) -> maps:update(u, 42, fun f/0) end. Since funs are not allowed to be created in guards, incorrect and unsafe code would be generated. It is easy to fix the bug. There already is a is_valid_map_src/1 function in v3_core that tests whether the argument for the map update operation can possibly be a valid map. A fun is represented as a variable with a special name in Core Erlang, so it would not be recognized as unsafe. All we'll need to do to fix the bug is to look closer at variables to ensure they don't represent funs. That will ensure that the code is rewritten in the correct way: update() -> error({badmap,fun f/0}) end. Reported-by: Thomas Arts | |||
2016-01-11 | erts: Workaround memset bug in test case | Sverker Eriksson | |
memset seen to fail with values larger than 255 on (armata) 32-bit ARM Debian with EGLIBC 2.13-38+rpi2+deb7u8 and gcc 4.6.3-14+rpi1. | |||
2016-01-11 | Merge branch 'maint-18' into maint | Henrik Nord | |
2016-01-11 | Fix inadvertent deletion of callback info | Stavros Aronis | |
If a behaviour module contains an non-exported function with the same name as one of the behaviour's callbacks, the callback info was inadvertently deleted from the PLT as the dialyzer_plt:delete_list/2 function was cleaning up the callback table. This bug was reported by Brujo Benavides. Fixes ERL-72 bug report. | |||
2016-01-11 | Eliminate ugly case statements | Stavros Aronis | |
2016-01-11 | Remove dead code related to missing behaviour info | Stavros Aronis | |
Dialyzer used to report unknown behaviours in the same way as unknown functions and types. This functionality has been removed in d101155, but some code remained. | |||
2016-01-11 | Eliminate crash in v3_codegen | Björn Gustavsson | |
The following code would crash v3_codegen: order(From) -> catch if From#{[] => sufficient} -> saint end. Before explaining the crash, first some background on the stack frame and the Y registers. Certain instructions, most notably the 'call' instructions, clobber all X registers. Before any such instruction, all X registers that have values that will be used after the call must be saved to Y registers (i.e. to the stack frame). adjust_stack/4 will be called when X registers must be saved. There is also another situation when X registers must be saved, namely within a 'catch' if we are about to execute any instruction that may cause an exception. Examples of such instructions are some guard BIFs (such as length/1) and construction of binaries or maps. Within a 'catch', X registers must be be saved because if an exception is thrown and catched all X registers will be destroyed. The same adjust_stack/4 function will be called for those instructions, but only if they occur within a 'catch'. There is actually one more complication. If there is code in a guard within a catch, the X registers should not be saved, because the code in a guard never clobbers any X registers that were alive before the guard code was entered. v3_codegen is written with the implicit assumption that code in guards never cause anything to be saved to Y registers. The code for building maps and binaries would incorrectly save X registers within a guard inside a 'catch'. For construction of binaries, that would mean that a useless but harmelss 'move' instruction was generated. But for construction of maps, the saving of the Y register would not be harmless. There would be a crash when attempting to merge #sr{} records. #sr{} records keeps track of the contents of X and Y registers. When two separate code paths are joined (e.g. at the end of 'case' statement), the register descriptors must be reconciled. Basically, the register descriptors for both paths must be identical. The #sr{} record for one path must not claim that {y,0} contains a certain value, while another path claims that {y,0} is dead. Thus, the crash occurs in sr_merge/2 when failing to reconcile the Y registers. To fix this bug this bug we will introduce a new function called maybe_adjust_stack/5. It will save X registers on the stack only if the code is inside a catch but not inside a guard. We will change all existing code to use this new function when appropriate. Reported-by: Thomas Arts | |||
2016-01-08 | Updated OTP versionOTP-18.2.2 | Erlang/OTP | |
2016-01-08 | Update release notes | Erlang/OTP | |
2016-01-08 | Merge branch 'hans/ssh/keyboard_interactive0/OTP-13255' into maint-18 | Erlang/OTP | |
* hans/ssh/keyboard_interactive0/OTP-13255: ssh: update vsn.mk to 4.2.1 ssh: handle secondary ssh_msg_userauth_info_request message ssh: testcase for abnormal keyboard-interactive authentication | |||
2016-01-08 | ssh: update vsn.mk to 4.2.1 | Hans Nilsson | |
2016-01-08 | ssh: handle secondary ssh_msg_userauth_info_request message | Hans Nilsson | |
2016-01-08 | ssh: testcase for abnormal keyboard-interactive authentication | Hans Nilsson | |
2016-01-07 | Merge branch 'bjorn/compiler/beam_bool/OTP-13208' into maint | Björn Gustavsson | |
* bjorn/compiler/beam_bool/OTP-13208: beam_bool: Fix unsafe optimization | |||
2016-01-07 | beam_bool: Fix unsafe optimization | Björn Gustavsson | |
beam_bool would make the following code unsafe (which would be reported by beam_validator): scotland(Echo) -> found(case Echo of Echo when true; Echo, Echo, Echo -> Echo; echo -> [] end, Echo = placed). found(_, _) -> million. Basically, beam_bool would see that the 'case' would always return the value of Echo. Thus: scotland(Echo) -> found(Echo, Echo = placed). The only problem is that beam_bool would also remove a 'move' instruction that would save Echo to the stack. Here is the assembly code for part of the function: {allocate_zero,1,1}. {move,{x,0},{y,0}}. %% Save Echo on stack. {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,1}}. {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,2}}. {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,3}}. {bif,'and',{f,7},[{x,2},{x,3}],{x,2}}. {bif,'and',{f,7},[{x,1},{x,2}],{x,1}}. {jump,{f,8}}. {label,7}. {move,{atom,false},{x,1}}. {label,8}. {bif,'or',{f,6},[{atom,true},{x,1}],{x,1}}. {test,is_eq_exact,{f,6},[{x,1},{atom,true}]}. %% Jump never taken. {jump,{f,5}}. {label,6}. {test,is_eq_exact,{f,9},[{x,0},{atom,echo}]}. {move,nil,{x,0}}. {jump,{f,5}}. {label,9}. {test_heap,3,0}. {put_tuple,2,{x,0}}. {put,{atom,case_clause}}. {put,{y,0}}. {line,[{location,"t.erl",5}]}. {call_ext,1,{extfunc,erlang,error,1}}. {jump,{f,5}}. {label,5}. {test,is_eq_exact,{f,12},[{atom,placed},{y,0}]}. beam_bool would see that the is_eq_exact test at label 8 would always succeed. It could therefore remove most of the code before the jump to label 5. Unfortunately it also removed the essential move of Echo to the stack: {allocate_zero,1,1}. %% Instruction incorrectly removed: {move,{x,0},{y,0}}. {jump,{f,5}}. {label,5}. {test,is_eq_exact,{f,12},[{atom,placed},{y,0}]}. The root cause of the problem is that the 'move' instruction is included in the block of 'bif' instructions before label 8. Normally the 'move' instruction would not have been discarded, but because the left operand to the 'or' BIF is 'true', the entire block with 'bif' instructions are dropped. As far as I can see, there is no gain by including 'move' instructions in the first place. There is no way that better code will be produced. In fact, the entire optimization can be given up if 'move' instructions are found in the block. Thus we can fix this bug by never including any 'move' instructions in the block of 'bif' instructions. We can also remove all the code that deals with 'move' instructions within blocks. Reported-by: Thomas Arts | |||
2016-01-01 | Do not consider "." part of names in edlin | José Valim | |
Today, if you press Ctrl+W inside erl, it will erase word chars including dots. This may have made sense in the past when Erlang had packages, but today considering the most common case for dots inside erl is to work with records, considering the dot part of the word is rather a mistake. For example, imagine the following code, where [] is the cursor: 1> S#elixir_scope.name[] When I press Ctrl+W it erases all up to #: 1> S#[] This patch changes it to the dot is no longer considered part of the name: 1> S#elixir_scope.[] Which is rather expected behaviour for most use cases of dot in Erlang. | |||
2015-12-30 | Merge branch 'rickard/rq-len/OTP-13201' into maint | Rickard Green | |
* rickard/rq-len/OTP-13201: Light weight statistics of run queue lengths | |||
2015-12-30 | Light weight statistics of run queue lengths | Rickard Green | |
- statistics(total_run_queue_lengths) - statistics(run_queue_lengths) - statistics(total_active_tasks) - statistics(active_tasks) Conflicts: erts/emulator/beam/erl_process.c | |||
2015-12-30 | Merge branch 'rickard/trace_call_time/OTP-13216' into maint | Rickard Green | |
* rickard/trace_call_time/OTP-13216: Use monotonic time for call_time trace | |||
2015-12-30 | Fix HL timer hard debug implementation | Rickard Green | |
2015-12-30 | Fix stack alignment problem in ethread test on arm | Rickard Green | |
2015-12-30 | Skip time_SUITE:timestamp on timewarp test | Rickard Green | |