Properly lint shortcircuiting operators

Shortcircuiting operators are not real functions and can't be used as
such with erlang:'andalso'(...) and erlang:'orelse'(...).

Reported-by: Ulf Norell
Do not mark all calls to erlang:is_function/2 as safe

Calls to erlang:is_function/2 where the second is not a literal nonnegative
integer can crash at runtime and thus can't be marked as safe.
Improve linting of map expressions

Map fields are put in their own function instead of being clauses of expr/3.
Also, invalid map construction expressions now emit one error per ':=' field,
at the location of said field instead of one for the whole expression,
furthermore, such warnings do not stop linting of their key and value
expressions anymore. Ill-formed maps constructions are now also properly
detected in guard expressions.
Properly detect nonboolean protected expressions in beam_bool

Silly code such as the following could make the compiler crash:

        f() when erlang:float(self()); true -> ok.

Reported-by: Ulf Norell
Handle nil as a wait_timeout argument in beam_utils:live_opt/4

Reported-by: Ulf Norell
Improve message about deprecated built-in types
Introduce compiler option 'nowarn_deprecated_type'

The deprecation of the built-in types dict/0 and so on had as
side-effect that it was impossible to switch to dict:dict/2 and so on
without getting warnings either in the the previous release (R16B) or
the current one (17.0).

By including the attribute

    -compile(nowarn_deprecated_type).

in an Erlang source file warnings about deprecated types can be
avoided in 17.0.

The option can also be given as a compiler flag:

erlc +nowarn_deprecated_type file.erl
Properly lint calls in Core Erlang guards

Not all calls to the erlang module are legal guards in Core Erlang.
Properly sort map pairs in v3_codegen

Literal nil values aren't tagged tuple but the bare atom nil.

The function lists:sort/2 expects the passed function to return true if the first
element is less than or equal to the second, not strictly less than. The original
base clause is changed accordingly.

Reported-by: Ulf Norell
Properly order Kernel code for maps with mixed pairs

The Kernel instructions were not properly ordered when compiling maps with
complex values mixed in assoc and exact pairs.

Reported-by: Ulf Norell
Support maps in cerl_clauses:match/2

Without this, sys_core_fold could crash on non-matching clauses using maps
patterns.

Reported-by: Ulf Norell
Properly check label use in get_map_elements in beam_jump

Reported-by: Ulf Norell
Add types for new HiPE BIFs

Commit 81c7db0e247a6ee1b7a5c2764aa9575d7f6fb88a broke apart
hipe_bif:make_fe/3 into two BIFs but forgot to properly update the
type information about HiPE BIFs in erl_bif_types.erl.  This commit
fixes this by taking out the types of hipe_bifs:make_fe/3 and adding
types for the new BIFs hipe_bifs:get_fe/2 and
hipe_bifs:hipe_bifs_set_native_address_in_fe/2.
stdlib: Improve the doc of the supervisor's via reference

Most of the updates have already been made in
'Fix alternative registry type annotations in supervisor',
a5412706f4185fddbac29216a49affd1e9f11da0.

Thanks to MaximMinin.
Do not try to optimize non-boolean guards

Expressions such as erlang:'or'(bar, true) can make beam_bool crash if it tries
to optimize them, as this code is not quite really written by users, no attempt
to rewrite them more efficiently should be done, for simplicity's sake.

Reported-by: Ulf Norell
Compile BIF calls and operator expressions to Core the same way

Previously, erlang:'or'(X, Y) and X or Y were not compiled to the same
Core code.
Merge branch 'hb/dialyzer/deprecate_types/OTP-10342'

* hb/dialyzer/deprecate_types/OTP-10342:
  Introduce compiler option 'nowarn_deprecated_type'
  Improve message about deprecated built-in types
Do not export variables from comprehension cases in v3_core

Code like the following snippet could make the compiler crash:

    f() -> [X = a || false] ++ [X = a || false].

Reported-by: Ulf Norell
Merge branch 'nox/compiler/lint-shortcircuit-ops'

* nox/compiler/lint-shortcircuit-ops:
  Properly lint shortcircuiting operators
Merge branch 'nox/compiler/sys_core_fold-erlang-is_function-2'

* nox/compiler/sys_core_fold-erlang-is_function-2:
  Do not mark all calls to erlang:is_function/2 as safe