v3_core: Annotate list comprehensions to help out dialyzer
Handle map fields in their own function in erl_eval

Map fields (K := V, K => V) are not expressions and shouldn't be clauses of
erl_eval:expr/5.
Support maps in erl_prettypr
stdlib: Add tests for Maps in erl_prettypr
Run sys_core_fold twice if any inliner is used
Optimise case arguments in sys_core_fold

If the argument of a case expression is a let, a seq or a case with two clauses
where the second one is a failing clause; it can be moved outside the case and
further optimisations can be performed.

module 'foo' ['t'/4]
  attributes []
't'/4 =
  fun (_cor14,Sub0,_cor15,_cor16) ->
    let Ssa = call 'erlang':'get' ('foo') in
      case let Ssa = {'ssa',_cor14,Sub0,_cor15,_cor16} in
           let _rec11 = call 'erlang':'+' (_cor14, 1) in
           let _cor4 = call 'erlang':'setelement' (2, Ssa, _rec11) in
             {{'tmp',_cor14},_cor4} of
        {NewReg,Foo} when 'true' ->
          {NewReg,Foo,Ssa}
        _cor20 when 'true' ->
          primop 'match_failure' ({'case_clause',_cor20})
      end
end

  ==>

module 'foo' ['t'/4]
  attributes []
't'/4 =
  fun (_cor14,Sub0,_cor15,_cor16) ->
    let Ssa = call 'erlang':'get' ('foo') in
    let _fol0 = {'ssa',_cor14,Sub0,_cor15,_cor16} in
    let _rec11 = call 'erlang':'+' (_cor14, 1) in
    let _cor4 = call 'erlang':'setelement' (2, _fol0, _rec11) in
    let NewReg = {'tmp',_cor14} in
      {NewReg,_cor4,Ssa}
end
sys_core_fold: Remove a redundant word in a comment
Teach sys_core_fold:eval_case/2 to cope with handwritten Core Erlang

Starting in e12b7d5331c58b41db06cadfa4af75b78b62a2b1,
sys_core_fold:eval_case/2 will crash on handwritten but legal
Core Erlang programs such as:

   case let <Var> = Arg in {'x',Var} of
      {x,X} -> X
   end

The problem is that the only clause *is* guaranteed to match, but
cerl_clauses:match_list/2 does not understand that; all it can say is
that the clause *may* match. In those circumstances, we will need to
keep the case.

Also make sure that we keep the case if the guard is something else
than 'true'. That is not strictly necessary, because in a legal Core
Erlang program the guard in the last clause in a case must always
evaluate to 'true', so removing the guard test would still leave the
program correct. Keeping the guard, however, will make it somewhat
easier to debug an incorrect Core Erlang program. (The unsafe_case
test case has guard test in the only clause in a case, so we don't
need to write a new test case to test that.)

Reported-by: Anthony Ramine
cover: Support running cover on itself

We want to see at least some coverage of cover itself.
Merge branch 'nox/maps-improve-erl_eval'

* nox/maps-improve-erl_eval:
  Handle map fields in their own function in erl_eval
Merge branch 'nox/maps-erl_prettypr'

* nox/maps-erl_prettypr:
  stdlib: Add tests for Maps in erl_prettypr
  Support maps in erl_prettypr
Merge branch 'bjorn/compiler/optimizations/OTP-11584'

* bjorn/compiler/optimizations/OTP-11584:
  Teach sys_core_fold:eval_case/2 to cope with handwritten Core Erlang
  sys_core_fold: Remove a redundant word in a comment
otp_build: Include parsetools in the release of a small system

When releasing a small system like this:

  ./otp_build setup
  ./otp_build release TARGET_DIR

include the parsetools application.

In one of our internal scripts, a previously built and released
Erlang/OTP system is used to update the primary bootstrap in a
git repository. A small system could not be used for that purpose
because parsetools was missing.
[stdlib] Remove a confusing comment in the re module

The line
%-opaque mp() :: {re_pattern, _, _, _, _}.
has been removed.

The mp() tuple is called 'opaque' in re(3), but it is not an opaque
type. The out-commented -opaque declaration was confusing.
[refmanual] Fix List in definition of pre-defined types

improper_list(Type1, Type2) has been replaced by
nonempty_improper_list(Type1, Type2).
Fix a few of Dialyzer's unmatched_return warnings
Merge branch 'hb/stdlib/re_remove_comment'

* hb/stdlib/re_remove_comment:
  [stdlib] Remove a confusing comment in the re module
Merge branch 'hb/refman/type_fix'

* hb/refman/type_fix:
  [refmanual] Fix List in definition of pre-defined types
Merge branch 'hb/fix_unmatched_returns'

* hb/fix_unmatched_returns:
  Fix a few of Dialyzer's unmatched_return warnings
test_server: Allow cover to run on itself