<feed xmlns='http://www.w3.org/2005/Atom'>
<title>otp.git/lib/compiler/src, branch sverker-ets-patch-1</title>
<subtitle>Mirror of Erlang/OTP repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/'/>
<entry>
<title>Merge branch 'maint-21' into maint</title>
<updated>2018-09-12T12:41:05+00:00</updated>
<author>
<name>Rickard Green</name>
<email>rickard@erlang.org</email>
</author>
<published>2018-09-12T12:41:05+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=6d665a8296999822e4d516343d0e21ed62e70b37'/>
<id>6d665a8296999822e4d516343d0e21ed62e70b37</id>
<content type='text'>
* maint-21:
  Updated OTP version
  Update release notes
  Update version numbers
  erts: Fix "Prevent inconsistent node lists" fix
  Fix include-path regression caused by dd0a39c
  Restore default SIGTERM behaviour for port programs
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* maint-21:
  Updated OTP version
  Update release notes
  Update version numbers
  erts: Fix "Prevent inconsistent node lists" fix
  Fix include-path regression caused by dd0a39c
  Restore default SIGTERM behaviour for port programs
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix include-path regression caused by dd0a39c</title>
<updated>2018-09-10T12:43:17+00:00</updated>
<author>
<name>John Högberg</name>
<email>john@erlang.org</email>
</author>
<published>2018-09-10T11:09:40+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=3c24f3803a504d20b604f9608a8c80ae31750fb3'/>
<id>3c24f3803a504d20b604f9608a8c80ae31750fb3</id>
<content type='text'>
Include paths don't actually affect code generation in any way, but
it's reasonable for a build tool like rebar3 to recompile when the
include paths change. This commit restores the old behavior without
the +deterministic flag.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Include paths don't actually affect code generation in any way, but
it's reasonable for a build tool like rebar3 to recompile when the
include paths change. This commit restores the old behavior without
the +deterministic flag.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'hasse/dialyzer/improve_guards/OTP-15268/ERL-680' into maint</title>
<updated>2018-08-31T06:08:46+00:00</updated>
<author>
<name>Hans Bolinder</name>
<email>hasse@erlang.org</email>
</author>
<published>2018-08-31T06:08:46+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=583b7add1d66616e61c332ded0658c684c39c8c6'/>
<id>583b7add1d66616e61c332ded0658c684c39c8c6</id>
<content type='text'>
* hasse/dialyzer/improve_guards/OTP-15268/ERL-680:
  dialyzer: Improve handling of complex guards
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* hasse/dialyzer/improve_guards/OTP-15268/ERL-680:
  dialyzer: Improve handling of complex guards
</pre>
</div>
</content>
</entry>
<entry>
<title>dialyzer: Improve handling of complex guards</title>
<updated>2018-08-28T06:27:52+00:00</updated>
<author>
<name>Hans Bolinder</name>
<email>hasse@erlang.org</email>
</author>
<published>2018-08-27T11:14:29+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=fd9b5ae4193fbab66093c88728c0dbeaa3b57312'/>
<id>fd9b5ae4193fbab66093c88728c0dbeaa3b57312</id>
<content type='text'>
See also https://bugs.erlang.org/browse/ERL-680.

The right associative short circuit expressions 'andalso' and 'orelse'
are expanded by the Compiler (see v3_core) into 'case' expressions. If
parentheses are used to enforce left associativeness, variables are
introduced, and the time needed by Dialyzer increases exponentially.

Rather than trying to fix Dialyzer itself, v3_core now rewrites
repeated use of 'andalso' ('orelse') into right associative
expressions before creating the 'case' expressions.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
See also https://bugs.erlang.org/browse/ERL-680.

The right associative short circuit expressions 'andalso' and 'orelse'
are expanded by the Compiler (see v3_core) into 'case' expressions. If
parentheses are used to enforce left associativeness, variables are
introduced, and the time needed by Dialyzer increases exponentially.

Rather than trying to fix Dialyzer itself, v3_core now rewrites
repeated use of 'andalso' ('orelse') into right associative
expressions before creating the 'case' expressions.
</pre>
</div>
</content>
</entry>
<entry>
<title>beam_validator: Infer the type of the map argument for is_map_key/2</title>
<updated>2018-08-22T08:35:43+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2018-08-22T08:17:50+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=e8deb9f8ff3cb32286ca9b87a36b23aadffd1a49'/>
<id>e8deb9f8ff3cb32286ca9b87a36b23aadffd1a49</id>
<content type='text'>
Make sure that beam_validator considers a call to is_map_key/2
followed by an update of the same map without an is_map/1 test
safe. (This situation will probably not be encountered when
using the compiler in OTP 21, but better safe than sorry.)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Make sure that beam_validator considers a call to is_map_key/2
followed by an update of the same map without an is_map/1 test
safe. (This situation will probably not be encountered when
using the compiler in OTP 21, but better safe than sorry.)
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix compiler crash when compiling double receives</title>
<updated>2018-08-14T14:24:30+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2018-08-14T14:06:52+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=ec8ae4b539bcb4b4eedf8dd3eb1e7bcdfe558580'/>
<id>ec8ae4b539bcb4b4eedf8dd3eb1e7bcdfe558580</id>
<content type='text'>
The compiler would crash when compiling a function with two
receive statements.

https://bugs.erlang.org/browse/ERL-703
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The compiler would crash when compiling a function with two
receive statements.

https://bugs.erlang.org/browse/ERL-703
</pre>
</div>
</content>
</entry>
<entry>
<title>Correct error behavior of is_map_key/2 in guards</title>
<updated>2018-08-13T07:26:36+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bjorn@erlang.org</email>
</author>
<published>2018-08-10T05:43:31+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=7e1eb2ed1f724945884d839bd8a99154e9382849'/>
<id>7e1eb2ed1f724945884d839bd8a99154e9382849</id>
<content type='text'>
Consider the following functions:

    foo() -&gt; bar(not_a_map).

    bar(M) when not is_map_key(a, M) -&gt; ok;
    bar(_) -&gt; error.

What will `foo/0` return? It depends. If the module is compiled
with the default compiler options, the return value will be
`ok`. If the module is compiled with the `inline` option,
the return value will be `error`.

The correct value is `error`, because the call to `is_map_key/2`
when the second argument is not a map should fail the entire
guard. That is the way other failing guards BIFs are handled.
For example:

    foo() -&gt; bar(not_a_tuple).

    bar(T) when not element(1, T) -&gt; ok;
    bar(_) -&gt; error.

`foo/0` always returns `error` (whether the code is inlined
or not).

This bug can be fixed by changing the classification of `is_map_key/2`
in the `erl_internal` module. It is now classified as a type test,
which is incorrect because type tests should not fail. Reclassifying
it as a plain guard BIF corrects the bug.

This correction also fixes the internal consistency check
failure which was reported in:

https://bugs.erlang.org/browse/ERL-699
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Consider the following functions:

    foo() -&gt; bar(not_a_map).

    bar(M) when not is_map_key(a, M) -&gt; ok;
    bar(_) -&gt; error.

What will `foo/0` return? It depends. If the module is compiled
with the default compiler options, the return value will be
`ok`. If the module is compiled with the `inline` option,
the return value will be `error`.

The correct value is `error`, because the call to `is_map_key/2`
when the second argument is not a map should fail the entire
guard. That is the way other failing guards BIFs are handled.
For example:

    foo() -&gt; bar(not_a_tuple).

    bar(T) when not element(1, T) -&gt; ok;
    bar(_) -&gt; error.

`foo/0` always returns `error` (whether the code is inlined
or not).

This bug can be fixed by changing the classification of `is_map_key/2`
in the `erl_internal` module. It is now classified as a type test,
which is incorrect because type tests should not fail. Reclassifying
it as a plain guard BIF corrects the bug.

This correction also fixes the internal consistency check
failure which was reported in:

https://bugs.erlang.org/browse/ERL-699
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679' into maint-21</title>
<updated>2018-08-10T17:02:28+00:00</updated>
<author>
<name>Erlang/OTP</name>
<email>otp@erlang.org</email>
</author>
<published>2018-08-10T17:02:28+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=dd0a39cdd7407cd739d02577e79c54ff0d78b7cf'/>
<id>dd0a39cdd7407cd739d02577e79c54ff0d78b7cf</id>
<content type='text'>
* john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679:
  Omit include path debug info for +deterministic builds

# Conflicts:
#	lib/compiler/test/compile_SUITE.erl
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679:
  Omit include path debug info for +deterministic builds

# Conflicts:
#	lib/compiler/test/compile_SUITE.erl
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #1911 from bjorng/bjorn/compiler/binary-syntax/ERL-689/OTP-15219</title>
<updated>2018-08-10T10:14:49+00:00</updated>
<author>
<name>Björn Gustavsson</name>
<email>bgustavsson@gmail.com</email>
</author>
<published>2018-08-10T10:14:49+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=77d307e6c3e705e14843101d4c5348c6c079ace0'/>
<id>77d307e6c3e705e14843101d4c5348c6c079ace0</id>
<content type='text'>
Fix bug in binary matching</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Fix bug in binary matching</pre>
</div>
</content>
</entry>
<entry>
<title>Merge branch 'john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679' into maint</title>
<updated>2018-08-09T15:12:10+00:00</updated>
<author>
<name>Rickard Green</name>
<email>rickard@erlang.org</email>
</author>
<published>2018-08-09T15:12:10+00:00</published>
<link rel='alternate' type='text/html' href='http://git.ninenines.eu/otp.git/commit/?id=a81f89796e439f672681ea21baaf9e87e0f1936b'/>
<id>a81f89796e439f672681ea21baaf9e87e0f1936b</id>
<content type='text'>
* john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679:
  Omit include path debug info for +deterministic builds
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* john/compiler/fix-deterministic-include-paths/OTP-15204/ERL-679:
  Omit include path debug info for +deterministic builds
</pre>
</div>
</content>
</entry>
</feed>
