<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/lib/compiler, branch OTP-18.2.3</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>Update release notes</title>
<updated>2015-12-15T08:45:27+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2015-12-15T08:45:27+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=f4a0ae1736216feac5ae053610644bba2e12ed34'/>
<id>f4a0ae1736216feac5ae053610644bba2e12ed34</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Update version numbers</title>
<updated>2015-12-15T08:43:08+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2015-12-15T08:43:08+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=4586435cd4ca0d3ad3aedd60f462aed8da589460'/>
<id>4586435cd4ca0d3ad3aedd60f462aed8da589460</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix missing filename and line number in warning</title>
<updated>2015-11-20T13:24:57+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2015-11-19T11:13:21+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=d4bb044cb5359c6d4bffe3efcb8256cf7199bdf3'/>
<id>d4bb044cb5359c6d4bffe3efcb8256cf7199bdf3</id>
<content type='text'>
When the 'bin_opt_info' is given, warnings without filenames
and line numbers could sometimes be produced:

  no_file: Warning: INFO: matching non-variables after
  a previous clause matching a variable will prevent delayed
  sub binary optimization

The reason for the missing information is that #c_alias{} records lack
location information. There are several ways to fix the problem. The
easiest seems to be to get the location information from the
code).

Noticed-by: José Valim
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When the 'bin_opt_info' is given, warnings without filenames
and line numbers could sometimes be produced:

  no_file: Warning: INFO: matching non-variables after
  a previous clause matching a variable will prevent delayed
  sub binary optimization

The reason for the missing information is that #c_alias{} records lack
location information. There are several ways to fix the problem. The
easiest seems to be to get the location information from the
code).

Noticed-by: José Valim
</pre>
</div>
</content>
</entry>
<entry>
<title>[compiler] Correct documentation</title>
<updated>2015-11-17T14:53:31+00:00</updated>
<author>
<name>Hans Bolinder</name>
<email>hasse@erlang.org</email>
</author>
<published>2015-10-13T12:01:18+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=6f50633829adc53d20a2c2aee454aef8caece907'/>
<id>6f50633829adc53d20a2c2aee454aef8caece907</id>
<content type='text'>
Fix mistakes found by 'xmllint'.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix mistakes found by 'xmllint'.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix cerl_trees:label/2 bug with map K/V swap</title>
<updated>2015-10-26T14:37:39+00:00</updated>
<author>
<name>Magnus Lång</name>
<email>margnus1@telia.com</email>
</author>
<published>2014-06-05T10:12:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=cc1026a0e646b3a21b7bd7930fb7294425f1d79b'/>
<id>cc1026a0e646b3a21b7bd7930fb7294425f1d79b</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>2015-09-21T15:09:23+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2015-09-21T15:09:23+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=6738d356a279835222b951fd213ed4cf9897eb7e'/>
<id>6738d356a279835222b951fd213ed4cf9897eb7e</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/cuddle-with-tests' into maint</title>
<updated>2015-09-14T13:19:17+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2015-09-14T13:19:17+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=7e0e50bafef2b0855eba3f0111e6e141025ebf13'/>
<id>7e0e50bafef2b0855eba3f0111e6e141025ebf13</id>
<content type='text'>
* bjorn/cuddle-with-tests: (23 commits)
  rand_SUITE: Speed up basic_stats/1
  base64_SUITE: Speed up roundtrip/1
  lists_SUITE: Test lists:concat/2
  lists_SUITE: Test lists:split/2
  lists_SUITE: Add a test case for lists:prefix/2
  lists_SUITE: Add hof/1 to test all high-order functions
  lists_SUITE: Add test for lists:takewhile/1
  lists_SUITE: Run test cases in each group in parallel
  lists_SUITE: Test lists:keyreplace/4
  lists_SUITE: Extend flatten/1 test to also test flatlength/1
  lists_SUITE: Correct test of lists:flatten/2
  id_transform_SUITE: Modernize test suite
  io_proto_SUITE: Speed up determination of default shell
  io_proto_SUITE: Refactor up rtnode() and friends
  gen_event_SUITE: Remove unnecessary sleep calls
  proc_lib: Improve coverage for crash/1
  proc_lib_SUITE: Eliminate compiler warnings
  io_SUITE: Add coverage/1 to completely cover io_lib_pretty
  io_SUITE: Extend coverage of code for testing printable chars
  io_SUITE: Speed up test for bad +pc option
  ...
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* bjorn/cuddle-with-tests: (23 commits)
  rand_SUITE: Speed up basic_stats/1
  base64_SUITE: Speed up roundtrip/1
  lists_SUITE: Test lists:concat/2
  lists_SUITE: Test lists:split/2
  lists_SUITE: Add a test case for lists:prefix/2
  lists_SUITE: Add hof/1 to test all high-order functions
  lists_SUITE: Add test for lists:takewhile/1
  lists_SUITE: Run test cases in each group in parallel
  lists_SUITE: Test lists:keyreplace/4
  lists_SUITE: Extend flatten/1 test to also test flatlength/1
  lists_SUITE: Correct test of lists:flatten/2
  id_transform_SUITE: Modernize test suite
  io_proto_SUITE: Speed up determination of default shell
  io_proto_SUITE: Refactor up rtnode() and friends
  gen_event_SUITE: Remove unnecessary sleep calls
  proc_lib: Improve coverage for crash/1
  proc_lib_SUITE: Eliminate compiler warnings
  io_SUITE: Add coverage/1 to completely cover io_lib_pretty
  io_SUITE: Extend coverage of code for testing printable chars
  io_SUITE: Speed up test for bad +pc option
  ...
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'c-rack/fix-typo3' into maint</title>
<updated>2015-09-11T08:17:10+00:00</updated>
<author>
<name>Zandra</name>
<email>zandra@erlang.org</email>
</author>
<published>2015-09-11T08:17:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=6fd0f00a4a5420621d5a12c28024a1f21fe8e14d'/>
<id>6fd0f00a4a5420621d5a12c28024a1f21fe8e14d</id>
<content type='text'>
* c-rack/fix-typo3:
  Fix typo in call_last/3 spec
  Fix typo
  Fix typo: message to send is in x(1) not x(0)
  Fix another small typo
  Fix typo
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* c-rack/fix-typo3:
  Fix typo in call_last/3 spec
  Fix typo
  Fix typo: message to send is in x(1) not x(0)
  Fix another small typo
  Fix typo
</pre>
</div>
</content>
</entry>
<entry>
<title>compile_SUITE: Add test of warnings</title>
<updated>2015-09-10T08:09:48+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2015-08-31T10:36:36+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=60a6858785f49357757691956295dbcb304c0508'/>
<id>60a6858785f49357757691956295dbcb304c0508</id>
<content type='text'>
Make sure that all warnings produced when compiling the
test suite contains filenames and line numbers.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Make sure that all warnings produced when compiling the
test suite contains filenames and line numbers.
</pre>
</div>
</content>
</entry>
<entry>
<title>compiler: Fix get_map_elements register corruption</title>
<updated>2015-09-04T15:58:03+00:00</updated>
<author>
<name>Björn-Egil Dahlberg</name>
<email>egil@erlang.org</email>
</author>
<published>2015-08-31T14:07:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=d0784035abb22f4f385c8a8737a7b15c3741bbca'/>
<id>d0784035abb22f4f385c8a8737a7b15c3741bbca</id>
<content type='text'>
Instruction get_map_elements might destroy target registers when the fail-label is taken.
Only seen for patterns with two, and only two, target registers.
Specifically: we copy one register, and then jump.

    foo(A,#{a := V1, b := V2}) -&gt; ...
    foo(A,#{b := V}) -&gt; ...

call foo(value, #{a=&gt;whops, c=&gt;42}).

corresponding assembler:

    {test,is_map,{f,5},[{x,1}]}.

    {get_map_elements,{f,7},{x,1},{list,[{atom,a},{x,1},{atom,b},{x,2}]}}.
    %% if 'a' exists but not 'b' {x,1} is overwritten, jump {f,7}

    {move,{integer,1},{x,0}}.
    {call_only,3,{f,10}}.
    {label,7}.

    {get_map_elements,{f,8},{x,1},{list,[{atom,b},{x,2}]}}.
    %% {x,1} (src) is read with a corrupt value

    {move,{x,0},{x,1}}.
    {move,{integer,2},{x,0}}.
    {call_only,3,{f,10}}.

The fix is to remove 'opt_moves' pass for get_map_elements instruction
in the case of two or more destinations.

Reported-by: Valery Tikhonov
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Instruction get_map_elements might destroy target registers when the fail-label is taken.
Only seen for patterns with two, and only two, target registers.
Specifically: we copy one register, and then jump.

    foo(A,#{a := V1, b := V2}) -&gt; ...
    foo(A,#{b := V}) -&gt; ...

call foo(value, #{a=&gt;whops, c=&gt;42}).

corresponding assembler:

    {test,is_map,{f,5},[{x,1}]}.

    {get_map_elements,{f,7},{x,1},{list,[{atom,a},{x,1},{atom,b},{x,2}]}}.
    %% if 'a' exists but not 'b' {x,1} is overwritten, jump {f,7}

    {move,{integer,1},{x,0}}.
    {call_only,3,{f,10}}.
    {label,7}.

    {get_map_elements,{f,8},{x,1},{list,[{atom,b},{x,2}]}}.
    %% {x,1} (src) is read with a corrupt value

    {move,{x,0},{x,1}}.
    {move,{integer,2},{x,0}}.
    {call_only,3,{f,10}}.

The fix is to remove 'opt_moves' pass for get_map_elements instruction
in the case of two or more destinations.

Reported-by: Valery Tikhonov
</pre>
</div>
</content>
</entry>
</feed>
