aboutsummaryrefslogtreecommitdiffstats
path: root/lib
AgeCommit message (Collapse)Author
2016-01-07beam_bool: Fix unsafe optimizationBjö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
2015-12-16Merge tag 'OTP-18.2' into maintHenrik Nord
=== OTP-18.2 === Changed Applications: - asn1-4.0.1 - common_test-1.11.1 - compiler-6.0.2 - crypto-3.6.2 - dialyzer-2.8.2 - diameter-1.11.1 - erl_docgen-0.4.1 - erl_interface-3.8.1 - erts-7.2 - eunit-2.2.12 - hipe-3.14 - inets-6.1 - jinterface-1.6.1 - kernel-4.1.1 - observer-2.1.1 - parsetools-2.1.1 - public_key-1.1 - runtime_tools-1.9.2 - sasl-2.6.1 - snmp-5.2.1 - ssh-4.2 - ssl-7.2 - stdlib-2.7 - test_server-3.9.1 - tools-2.8.2 - typer-0.9.10 - wx-1.6 - xmerl-1.3.9 Unchanged Applications: - cosEvent-2.2 - cosEventDomain-1.2 - cosFileTransfer-1.2 - cosNotification-1.2 - cosProperty-1.2 - cosTime-1.2 - cosTransactions-1.3 - debugger-4.1.1 - edoc-0.7.17 - eldap-1.2 - et-1.5.1 - gs-1.6 - ic-4.4 - megaco-3.18 - mnesia-4.13.2 - odbc-2.11.1 - orber-3.8 - os_mon-2.4 - ose-1.1 - otp_mibs-1.1 - percept-0.8.11 - reltool-0.7 - syntax_tools-1.7 - webtool-0.9
2015-12-15Merge branch 'ia/libressl' into maintIngela Anderton Andin
* ia/libressl: ssl: Print openssl version string ssl: Do not use environment variables in openSSL config file
2015-12-15ssl: Convert all test to use "ssl_test_lib:portable_open_port"Ingela Anderton Andin
2015-12-15Update release notesErlang/OTP
2015-12-15Update version numbersErlang/OTP
2015-12-15Merge branch 'ia/libressl' into maintErlang/OTP
* ia/libressl: ssl: Print openssl version string ssl: Do not use environment variables in openSSL config file
2015-12-15Merge branch 'siri/appups-18.2' into maintErlang/OTP
* siri/appups-18.2: Update appups in kernel, stdlib and sasl for OTP-18.2
2015-12-15Merge branch 'ia/inets/dialyzer-custom' into maintIngela Anderton Andin
* ia/inets/dialyzer-custom: inets: Include behaviour modules in install target inets: Fix dialyzer warning
2015-12-15inets: Include behaviour modules in install targetIngela Anderton Andin
2015-12-15inets: Fix dialyzer warningIngela Anderton Andin
2015-12-14ssl: Print openssl version stringIngela Anderton Andin
2015-12-14Merge branch 'zandra/fix-snmp-appup' into maintZandra
* zandra/fix-snmp-appup: correct the snmp app up file
2015-12-14ssl: Do not use environment variables in openSSL config fileIngela Anderton Andin
LibreSSL does not allow it.
2015-12-14Merge branch 'dgud/wx/fix-observer-display' into maintDan Gudmundsson
* dgud/wx/fix-observer-display: wx: Revert part of 617387025b698c
2015-12-14Merge branch 'ia/pr/919/OTP-13189' into maintIngela Anderton Andin
* ia/pr/919/OTP-13189: ssl: fix hibernate_after with instant or near instant timeouts
2015-12-12wx: Revert part of 617387025b698cDan Gudmundsson
Causes issues on mac and observer
2015-12-11ssl: fix hibernate_after with instant or near instant timeoutsAndrey Mayorov
2015-12-11Merge branch 'siri/sasl/doc-editors/OTP-13000' into maintSiri Hansen
* siri/sasl/doc-editors/OTP-13000: sasl: Editorial changes
2015-12-11Update appups in kernel, stdlib and sasl for OTP-18.2Siri Hansen
2015-12-11correct the snmp app up fileZandra
2015-12-11ssl: Fix typosIngela Anderton Andin
2015-12-11Merge branch 'ia/ssl/windows-tests' into maintIngela Anderton Andin
* ia/ssl/windows-tests: ssl: Use test case time out instead ssl: Use spawn_executable
2015-12-11Merge branch 'ia/ssl/renegotiate-tests' into maintIngela Anderton Andin
* ia/ssl/renegotiate-tests: ssl: Add renegotiation exception
2015-12-11[inets] Correct broken linksLars Thorsen
2015-12-11[orber] Align documentation to DTDLars Thorsen
2015-12-11[inets] Align documentation to DTDLars Thorsen
2015-12-11[ssl] Moved description details to man(6) pageLars Thorsen
2015-12-11[ssh] Align documentation to DTDLars Thorsen
2015-12-11[ssl] Correct the documentation so it follows the DTDLars Thorsen
2015-12-11[erl_docgen] Update element section in DTDLars Thorsen
Allow sections in sections for reference manuals.
2015-12-11[erl_docgen] Update element d in DTDLars Thorsen
Allow seealso in the d element
2015-12-11[erl_docgen] Update item element in DTDLars Thorsen
Allow note, warning, do, dont in item element.
2015-12-11Merge branch 'peppe/common_test/priv_dir_mode_bug' into maintPeter Andersson
* peppe/common_test/priv_dir_mode_bug: Make sure priv_dir names don't cause name clashes OTP-13181
2015-12-11Merge branch 'peppe/common_test/exit_status_when_missing_suites' into maintPeter Andersson
* peppe/common_test/exit_status_when_missing_suites: Let missing suites affect ct:run_test/1 return and ct_run exit status Make abort_if_missing_suites option work in all io modes OTP-13173
2015-12-10Let missing suites affect ct:run_test/1 return and ct_run exit statusPeter Andersson
2015-12-10sasl: Editorial changesxsipewe
2015-12-09Merge branch 'hans/ssh/cuddle_tests' into maintHans Nilsson
* hans/ssh/cuddle_tests: ssh: more info from failed case
2015-12-09ssl: Use test case time out insteadIngela Anderton Andin
2015-12-09ssl: Use spawn_executableIngela Anderton Andin
2015-12-09Merge branch 'anders/diameter/18.2/OTP-13180' into maintAnders Svensson
* anders/diameter/18.2/OTP-13180: vsn -> 1.11.1 Update appup for 18.2
2015-12-09Merge branch 'anders/diameter/request_leak/OTP-13137' into maintAnders Svensson
* anders/diameter/request_leak/OTP-13137: Fix request table leak at retransmission Fix request table leak at exit signal
2015-12-09Fix request table leak at retransmissionAnders Svensson
In the case of retranmission, a prepare_retransmit callback could modify End-to-End and/or Hop-by-Hop identifiers so that the resulting diameter_request entry was not removed, since the removal was of entries with the identifiers of the original request. The chances someone doing this in practice are probably minimal.
2015-12-09Fix request table leak at exit signalAnders Svensson
The storing of request records in the ets table diameter_request was wrapped in a try/after so that the latter would unconditionally remove written entries. The problem is that it didn't deal with the process exiting as a result of an exit signal, since this doesn't raise in an exception. Since the process in question applies callbacks to user code, we can potentially be linked to other process and exit as a result. Trapping exits changes the current behaviour of the process, so spawn a monitoring process that cleans up upon reception of 'DOWN'.
2015-12-09[observer] Correct documentationHans Bolinder
Fix mistakes found by 'xmllint'.
2015-12-09[common_test] Correct documentationHans Bolinder
Fix mistakes found by 'xmllint'.
2015-12-09ssl: Add renegotiation exceptionIngela Anderton Andin
2015-12-09Merge branch 'siri/ct_netconfc/slow-down/OTP-13007' into maintSiri Hansen
* siri/ct_netconfc/slow-down/OTP-13007: Extended table_trans timer in order to handle big data on slow machines Don't log headings without content Speed up receive of many small packages Conflicts: lib/common_test/src/ct_conn_log_h.erl
2015-12-09Merge branch 'ia/ssl-prepare-release' into maintIngela Anderton Andin
* ia/ssl-prepare-release: ssl: Correct spec ssl: Prepare for release
2015-12-08ssh: more info from failed caseHans Nilsson