{"push_id":930155437,"size":14,"distinct_size":0,"ref":"refs/heads/maint","head":"12dffc7f0c85aa4662b97cba4af2c9ae2ba74083","before":"1237669f7c59714f0c27d3df748241dfd655c0be","commits":[{"sha":"77f0f265f860130102acc1db31d99f8dd9e690c5","author":{"email":"a8462360f5c7dcf1e9c7a5c3c3b4100a207fc25d@erlang.org","name":"Rickard Green"},"message":"Use monotonic time for call_time trace","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/77f0f265f860130102acc1db31d99f8dd9e690c5"},{"sha":"d32ef0d4fab9b18d34b97fd7c785bcadfe292f81","author":{"email":"a8462360f5c7dcf1e9c7a5c3c3b4100a207fc25d@erlang.org","name":"Rickard Green"},"message":"Merge branch 'rickard/trace_call_time/OTP-13216' into maint\n\n* rickard/trace_call_time/OTP-13216:\n  Use monotonic time for call_time trace","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/d32ef0d4fab9b18d34b97fd7c785bcadfe292f81"},{"sha":"37f58ad6bff2bf2bac4f3f20c2684e8cee66af03","author":{"email":"a8462360f5c7dcf1e9c7a5c3c3b4100a207fc25d@erlang.org","name":"Rickard Green"},"message":"Light weight statistics of run queue lengths\n\n- statistics(total_run_queue_lengths)\n- statistics(run_queue_lengths)\n- statistics(total_active_tasks)\n- statistics(active_tasks)\n\nConflicts:\n\terts/emulator/beam/erl_process.c","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/37f58ad6bff2bf2bac4f3f20c2684e8cee66af03"},{"sha":"df18cd270ad682cedc8c21990641b0bdb8788092","author":{"email":"a8462360f5c7dcf1e9c7a5c3c3b4100a207fc25d@erlang.org","name":"Rickard Green"},"message":"Merge branch 'rickard/rq-len/OTP-13201' into maint\n\n* rickard/rq-len/OTP-13201:\n  Light weight statistics of run queue lengths","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/df18cd270ad682cedc8c21990641b0bdb8788092"},{"sha":"7c72e25926e153811ff099057bea649afa0be376","author":{"email":"8a2957e0063f2abf61bd145b6236a74a3708ac54@erlang.org","name":"Björn Gustavsson"},"message":"beam_bool: Fix unsafe optimization\n\nbeam_bool would make the following code unsafe (which would be\nreported by beam_validator):\n\nscotland(Echo) ->\n  found(case Echo of\n\t    Echo when true; Echo, Echo, Echo ->\n\t\tEcho;\n\t    echo ->\n\t\t[]\n\tend,\n\tEcho = placed).\n\nfound(_, _) -> million.\n\nBasically, beam_bool would see that the 'case' would always return\nthe value of Echo. Thus:\n\nscotland(Echo) ->\n  found(Echo, Echo = placed).\n\nThe only problem is that beam_bool would also remove a 'move'\ninstruction that would save Echo to the stack. Here is the\nassembly code for part of the function:\n\n    {allocate_zero,1,1}.\n\n    {move,{x,0},{y,0}}.           %% Save Echo on stack.\n\n    {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,1}}.\n    {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,2}}.\n    {bif,'=:=',{f,7},[{x,0},{atom,true}],{x,3}}.\n    {bif,'and',{f,7},[{x,2},{x,3}],{x,2}}.\n    {bif,'and',{f,7},[{x,1},{x,2}],{x,1}}.\n    {jump,{f,8}}.\n\n  {label,7}.\n    {move,{atom,false},{x,1}}.\n\n  {label,8}.\n    {bif,'or',{f,6},[{atom,true},{x,1}],{x,1}}.\n    {test,is_eq_exact,{f,6},[{x,1},{atom,true}]}. %% Jump never taken.\n\n    {jump,{f,5}}.\n\n  {label,6}.\n    {test,is_eq_exact,{f,9},[{x,0},{atom,echo}]}.\n    {move,nil,{x,0}}.\n    {jump,{f,5}}.\n  {label,9}.\n    {test_heap,3,0}.\n    {put_tuple,2,{x,0}}.\n    {put,{atom,case_clause}}.\n    {put,{y,0}}.\n    {line,[{location,\"t.erl\",5}]}.\n    {call_ext,1,{extfunc,erlang,error,1}}.\n    {jump,{f,5}}.\n\n  {label,5}.\n    {test,is_eq_exact,{f,12},[{atom,placed},{y,0}]}.\n\nbeam_bool would see that the is_eq_exact test at label 8 would\nalways succeed. It could therefore remove most of the code before\nthe jump to label 5. Unfortunately it also removed the essential\nmove of Echo to the stack:\n\n    {allocate_zero,1,1}.\n\n    %% Instruction incorrectly removed: {move,{x,0},{y,0}}.\n\n    {jump,{f,5}}.\n\n  {label,5}.\n    {test,is_eq_exact,{f,12},[{atom,placed},{y,0}]}.\n\nThe root cause of the problem is that the 'move' instruction is\nincluded in the block of 'bif' instructions before label 8.\nNormally the 'move' instruction would not have been discarded,\nbut because the left operand to the 'or' BIF is 'true', the\nentire block with 'bif' instructions are dropped.\n\nAs far as I can see, there is no gain by including 'move'\ninstructions in the first place. There is no way that better\ncode will be produced. In fact, the entire optimization can\nbe given up if 'move' instructions are found in the block.\n\nThus we can fix this bug by never including any 'move' instructions\nin the block of 'bif' instructions. We can also remove all the\ncode that deals with 'move' instructions within blocks.\n\nReported-by: Thomas Arts","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/7c72e25926e153811ff099057bea649afa0be376"},{"sha":"c0ff4189f752fdfe20b231492b2084dfe8cecdb2","author":{"email":"8a2957e0063f2abf61bd145b6236a74a3708ac54@erlang.org","name":"Björn Gustavsson"},"message":"Merge branch 'bjorn/compiler/beam_bool/OTP-13208' into maint\n\n* bjorn/compiler/beam_bool/OTP-13208:\n  beam_bool: Fix unsafe optimization","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/c0ff4189f752fdfe20b231492b2084dfe8cecdb2"},{"sha":"04a9f3d11d15035c583dbf3ff3009f186611faac","author":{"email":"8800578b51f022c8d8adb9606a8b3db4fedbdac6@erlang.org","name":"Hans Nilsson"},"message":"ssh: testcase for abnormal keyboard-interactive authentication","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/04a9f3d11d15035c583dbf3ff3009f186611faac"},{"sha":"ed7d29ca3b6e8a165bdeb182799cbba5e204326f","author":{"email":"8800578b51f022c8d8adb9606a8b3db4fedbdac6@erlang.org","name":"Hans Nilsson"},"message":"ssh: handle secondary ssh_msg_userauth_info_request message","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/ed7d29ca3b6e8a165bdeb182799cbba5e204326f"},{"sha":"9394c572a28d08f3c564d6f388152c9c41968565","author":{"email":"8800578b51f022c8d8adb9606a8b3db4fedbdac6@erlang.org","name":"Hans Nilsson"},"message":"ssh: update vsn.mk to 4.2.1","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/9394c572a28d08f3c564d6f388152c9c41968565"},{"sha":"99f3ef4df2fe90bc67afe9dc87464be18457dfec","author":{"email":"7a20aecd2cb38bc00e301d11d10224588104c366@erlang.org","name":"Erlang/OTP"},"message":"Merge branch 'hans/ssh/keyboard_interactive0/OTP-13255' into maint-18\n\n* hans/ssh/keyboard_interactive0/OTP-13255:\n  ssh: update vsn.mk to 4.2.1\n  ssh: handle secondary ssh_msg_userauth_info_request message\n  ssh: testcase for abnormal keyboard-interactive authentication","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/99f3ef4df2fe90bc67afe9dc87464be18457dfec"},{"sha":"9498322e15bf1cc049996813f3422462fd402502","author":{"email":"7a20aecd2cb38bc00e301d11d10224588104c366@erlang.org","name":"Erlang/OTP"},"message":"Update release notes","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/9498322e15bf1cc049996813f3422462fd402502"},{"sha":"7cf9a621c5280a3e97967c4c63ab6ca1adde69c3","author":{"email":"7a20aecd2cb38bc00e301d11d10224588104c366@erlang.org","name":"Erlang/OTP"},"message":"Updated OTP version","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/7cf9a621c5280a3e97967c4c63ab6ca1adde69c3"},{"sha":"f0bc967c38d8859ff794e93082e9d2fb495f34d3","author":{"email":"8a2957e0063f2abf61bd145b6236a74a3708ac54@erlang.org","name":"Björn Gustavsson"},"message":"Eliminate crash in v3_codegen\n\nThe following code would crash v3_codegen:\n\n  order(From) ->\n    catch\n     if\n      From#{[] => sufficient} ->\n       saint\n     end.\n\nBefore explaining the crash, first some background on the stack\nframe and the Y registers.\n\nCertain instructions, most notably the 'call' instructions, clobber\nall X registers. Before any such instruction, all X registers that\nhave values that will be used after the call must be saved to Y\nregisters (i.e. to the stack frame). adjust_stack/4 will be called\nwhen X registers must be saved.\n\nThere is also another situation when X registers must be saved, namely\nwithin a 'catch' if we are about to execute any instruction that may\ncause an exception. Examples of such instructions are some guard BIFs\n(such as length/1) and construction of binaries or maps.  Within a\n'catch', X registers must be be saved because if an exception is\nthrown and catched all X registers will be destroyed.  The same\nadjust_stack/4 function will be called for those instructions, but\nonly if they occur within a 'catch'.\n\nThere is actually one more complication. If there is code in\na guard within a catch, the X registers should not be saved, because\nthe code in a guard never clobbers any X registers that were alive\nbefore the guard code was entered. v3_codegen is written with the\nimplicit assumption that code in guards never cause anything\nto be saved to Y registers.\n\nThe code for building maps and binaries would incorrectly save X\nregisters within a guard inside a 'catch'.\n\nFor construction of binaries, that would mean that a useless but\nharmelss 'move' instruction was generated.\n\nBut for construction of maps, the saving of the Y register would not\nbe harmless. There would be a crash when attempting to merge #sr{}\nrecords. #sr{} records keeps track of the contents of X and Y\nregisters. When two separate code paths are joined (e.g. at the end of\n'case' statement), the register descriptors must be reconciled.\n\nBasically, the register descriptors for both paths must be identical.\nThe #sr{} record for one path must not claim that {y,0} contains\na certain value, while another path claims that {y,0} is dead.\n\nThus, the crash occurs in sr_merge/2 when failing to reconcile the\nY registers.\n\nTo fix this bug this bug we will introduce a new function called\nmaybe_adjust_stack/5. It will save X registers on the stack only\nif the code is inside a catch but not inside a guard. We will\nchange all existing code to use this new function when appropriate.\n\nReported-by: Thomas Arts","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/f0bc967c38d8859ff794e93082e9d2fb495f34d3"},{"sha":"12dffc7f0c85aa4662b97cba4af2c9ae2ba74083","author":{"email":"a076b11c2cc63ccdc903dbe182e1eecc3cbbc094@erlang.org","name":"Henrik Nord"},"message":"Merge branch 'maint-18' into maint","distinct":false,"url":"https://api.github.com/repos/bugs-erlang-org/otp/commits/12dffc7f0c85aa4662b97cba4af2c9ae2ba74083"}]}