v3_core: Annotate list comprehensions to help out dialyzer
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 '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
cover_SUITE: Run part of the test suite when cover is running

We used to skip the entire test suite if the cover server had already
been started by common_test, but that means that we will get bad
coverage for the cover module.

Modify the test suite to to run all tests case that don't explicitly
start or stop the cover server to increase the coverage. In addition,
add a special coverage_analysis/1 test case that only runs when
the cover server is already running.
cover: Remove support for ancient formats of abstract code

The raw_abstract_v1 format that is currently used was introduced
in R9C. Beam files that old cannot be executed by the current
run-time system, so there is no need to continue the old formats.

Removing the support will increase coverage.
cover: Use lists:reverse/1 instead of the home-brewn reverse function
Merge branch 'bjorn/otp_build-small-system'

* bjorn/otp_build-small-system:
  otp_build: Include parsetools in the release of a small system
Merge branch 'bjorn/tools/cover/OTP-11692'

* bjorn/tools/cover/OTP-11692:
  cover: Use lists:reverse/1 instead of the home-brewn reverse function
  cover: Remove support for ancient formats of abstract code
  cover_SUITE: Run part of the test suite when cover is running
  test_server: Allow cover to run on itself
  cover: Support running cover on itself