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
make clean should not remove SKIP files

Add new make target 'distclean' that removes
files created by configure.

SKIP files are created by configure for instance
if configured  --without-javac.  They should only
be removed if one has to reconfigure, otherwise
'make clean; make' breaks.
Merge branch 'larsr/distclean'

* larsr/distclean:
  make clean should not remove SKIP files

OTP-11683
Allow persistent option on set_env/4 and unset_env/3

An environment key set with the persistent option will not
be overridden by the ones configured in the application resource
file on load. This means persistent values will stick after the
application is loaded and also on application reload.
Merge branch 'fenollp/shell-expand-0arity-completely'

* fenollp/shell-expand-0arity-completely:
  Shell: expand 0-arity functions all the way to closing parenthesis

OTP-11684
Merge branch 'tuncer/fix-public_key-specs'

* tuncer/fix-public_key-specs:
  public_key(3): fix private_key/0 type definition

OTP-11627
cover: Support running cover on itself

We want to see at least some coverage of cover itself.
Fix problem with verification for parallel groups in ct_telnet_SUITE
jinterface: implement support for maps

The API and implementation are simplistic, like for lists and tuples,
using arrays and without any connection to java.util.Map.
Handle nonempty list types in docgen_edoc_xml_cb
Handle map types in docgen_edoc_xml_cb
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
gs: Minor doc fix, gs is deprecated
sasl: Fix testcase which didn't work on windows

Quoting on Windows is strange
dbg: Remove debug printouts and fix file dialog

Use default positions when open windows.
Remove io:formats() for unhandled events.
Fix file dialog completion window which didn't invoke refrash
Update appups and appup tests for kernel, stdlib and sasl

Appups now only support one major release back, and the tests are
updated accordingly.

Support is also added in tests for giving previous releases in a ct
config file, e.g.

{otp_releases,[{r15,"/path/to/r15/bin/erl"},
	       {r16,"/path/to/r16/bin/erl"},
	       {'17',"/path/to/17/bin/erl"}]}.