<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git, branch OTP-21.0.1</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>Updated OTP version</title>
<updated>2018-06-25T11:19:47+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-25T11:19:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=a09907d56e29b24ded9a34de82bceac7f39021d1'/>
<id>a09907d56e29b24ded9a34de82bceac7f39021d1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Prepare release</title>
<updated>2018-06-25T11:19:45+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-25T11:19:45+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=aeb4b903064ac690372fe4d2e668397d349c00d9'/>
<id>aeb4b903064ac690372fe4d2e668397d349c00d9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150' into maint-21</title>
<updated>2018-06-25T11:19:32+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-25T11:19:32+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=1718d838bd6bab0652cd8cb548bee48ff261cba5'/>
<id>1718d838bd6bab0652cd8cb548bee48ff261cba5</id>
<content type='text'>
* bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150:
  Fix unsafe optimization when running beam_block the second time
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* bjorn/compiler/fix-beam_utils/ERL-650/OTP-15150:
  Fix unsafe optimization when running beam_block the second time
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'john/erts/win32-case-insensitive-osenv/OTP-15147/ERL-644' into maint-21</title>
<updated>2018-06-25T11:19:31+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-25T11:19:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=054855f37fe62674ef972452c5de94f9cceaccb7'/>
<id>054855f37fe62674ef972452c5de94f9cceaccb7</id>
<content type='text'>
* john/erts/win32-case-insensitive-osenv/OTP-15147/ERL-644:
  Fix environment case sensitivity issues on Windows
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* john/erts/win32-case-insensitive-osenv/OTP-15147/ERL-644:
  Fix environment case sensitivity issues on Windows
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix unsafe optimization when running beam_block the second time</title>
<updated>2018-06-25T11:03:15+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2018-06-25T04:18:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=3dd17613fc7af70bc7f1222d7381533df0bd4eab'/>
<id>3dd17613fc7af70bc7f1222d7381533df0bd4eab</id>
<content type='text'>
The compiler would crash when compiling code such as:

    serialize(#{tag := value, id := Id, domain := Domain}) -&gt;
        [case Id of
             nil -&gt;
                 error(id({required, id}));
             _ -&gt;
                 &lt;&lt;10, 1:16/signed, Id:16/signed&gt;&gt;
         end,
         case Domain of
             nil -&gt;
                 error(id({required, domain}));
             _ -&gt;
                 &lt;&lt;8, 2:16/signed, Domain:32/signed&gt;&gt;
         end].

The crash would look like this:

    Function: serialize/1
    t.erl: internal error in block2;
    crash reason: {badmatch,false}

      in function  beam_utils:live_opt/4 (beam_utils.erl, line 861)
      in call from beam_utils:live_opt/1 (beam_utils.erl, line 285)
      in call from beam_block:function/2 (beam_block.erl, line 47)
      in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
      in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
      in call from beam_block:module/2 (beam_block.erl, line 33)
      in call from compile:block2/2 (compile.erl, line 1358)
      in call from compile:'-internal_comp/5-anonymous-1-'/3 (compile.erl, line 349)

The reason for the crash is an assertion failure caused by a previous
unsafe optimization. Here is the code before the unsafe optimization:

       .
       .
       .
    {bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
    {bs_put_string,3,{string,[8,0,2]}}.
    {bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.

    {move,{x,1},{x,0}}.
    {test_heap,4,1}.
       .
       .
       .

beam_block:move_allocate/1 moved up the test_heap/2 instruction past the
move/2 instruction, adjusting the number of live registers at the same
time:

       .
       .
       .
    {bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
    %% Only x1 is live now.
    {bs_put_string,3,{string,[8,0,2]}}.
    {bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.

    {test_heap,4,2}.     %Unsafe. x0 is dead.
    {move,{x,1},{x,0}}.
       .
       .
       .

This optimization is unsafe because the bs_init2 instruction killed
x0.

The bug is in beam_utils:anno_defs/1, which adds annotations indicating
the registers that are defined at the beginning of each block. The
annotation before the move/2 instruction incorrectly indicated that
x0 was live.

https://bugs.erlang.org/browse/ERL-650
https://github.com/elixir-lang/elixir/issues/7782
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The compiler would crash when compiling code such as:

    serialize(#{tag := value, id := Id, domain := Domain}) -&gt;
        [case Id of
             nil -&gt;
                 error(id({required, id}));
             _ -&gt;
                 &lt;&lt;10, 1:16/signed, Id:16/signed&gt;&gt;
         end,
         case Domain of
             nil -&gt;
                 error(id({required, domain}));
             _ -&gt;
                 &lt;&lt;8, 2:16/signed, Domain:32/signed&gt;&gt;
         end].

The crash would look like this:

    Function: serialize/1
    t.erl: internal error in block2;
    crash reason: {badmatch,false}

      in function  beam_utils:live_opt/4 (beam_utils.erl, line 861)
      in call from beam_utils:live_opt/1 (beam_utils.erl, line 285)
      in call from beam_block:function/2 (beam_block.erl, line 47)
      in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
      in call from beam_block:'-module/2-lc$^0/1-0-'/2 (beam_block.erl, line 33)
      in call from beam_block:module/2 (beam_block.erl, line 33)
      in call from compile:block2/2 (compile.erl, line 1358)
      in call from compile:'-internal_comp/5-anonymous-1-'/3 (compile.erl, line 349)

The reason for the crash is an assertion failure caused by a previous
unsafe optimization. Here is the code before the unsafe optimization:

       .
       .
       .
    {bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
    {bs_put_string,3,{string,[8,0,2]}}.
    {bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.

    {move,{x,1},{x,0}}.
    {test_heap,4,1}.
       .
       .
       .

beam_block:move_allocate/1 moved up the test_heap/2 instruction past the
move/2 instruction, adjusting the number of live registers at the same
time:

       .
       .
       .
    {bs_init2,{f,0},7,0,0,{field_flags,[]},{x,1}}.
    %% Only x1 is live now.
    {bs_put_string,3,{string,[8,0,2]}}.
    {bs_put_integer,{f,0},{integer,32},1,{field_flags,[signed,big]},{y,1}}.

    {test_heap,4,2}.     %Unsafe. x0 is dead.
    {move,{x,1},{x,0}}.
       .
       .
       .

This optimization is unsafe because the bs_init2 instruction killed
x0.

The bug is in beam_utils:anno_defs/1, which adds annotations indicating
the registers that are defined at the beginning of each block. The
annotation before the move/2 instruction incorrectly indicated that
x0 was live.

https://bugs.erlang.org/browse/ERL-650
https://github.com/elixir-lang/elixir/issues/7782
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix environment case sensitivity issues on Windows</title>
<updated>2018-06-21T10:34:33+00:00</updated>
<author>
<name>John Högberg</name>
<email>john@erlang.org</email>
</author>
<published>2018-06-21T08:07:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=718fcf2637aa1a2231399c03ae6984bb6143ffaf'/>
<id>718fcf2637aa1a2231399c03ae6984bb6143ffaf</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Updated OTP version</title>
<updated>2018-06-19T06:24:56+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-19T06:24:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=a0ae44f324576104760a63fe6cf63e0ca31756fc'/>
<id>a0ae44f324576104760a63fe6cf63e0ca31756fc</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Prepare release</title>
<updated>2018-06-19T06:24:54+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-06-19T06:24:54+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=bb19e24a485e9ef43bcca3fbe9757da83f70c3a0'/>
<id>bb19e24a485e9ef43bcca3fbe9757da83f70c3a0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>travis: Don't run docs deploy script</title>
<updated>2018-06-18T15:15:33+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2018-06-18T15:15:33+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=fab4839df8dbf6ee394278893382abd9800236a1'/>
<id>fab4839df8dbf6ee394278893382abd9800236a1</id>
<content type='text'>
Need to create a seperate repo first for this to push to.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Need to create a seperate repo first for this to push to.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'lukas/travis/deploy'</title>
<updated>2018-06-18T14:47:56+00:00</updated>
<author>
<name>Lukas Larsson</name>
<email>lukas@erlang.org</email>
</author>
<published>2018-06-18T14:47:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=b4cb07a6f618b37109d6bdc21240fbac66f8e078'/>
<id>b4cb07a6f618b37109d6bdc21240fbac66f8e078</id>
<content type='text'>
* lukas/travis/deploy:
  Add deploy stage to travis-ci
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* lukas/travis/deploy:
  Add deploy stage to travis-ci
</pre>
</div>
</content>
</entry>
</feed>
