Age | Commit message (Collapse) | Author |
|
|
|
|
|
Consider the type `{ok, #record{}} | {error,atom()}`; in our
current type representation this will be flattened down to
`{ok | error, #record{} | atom()}`, which is fairly useful but has
no connection between the elements. Testing that the first element
is 'error' lets us skip checking that it's 'ok' on failure, but the
second element is still `#record{} | atom()` and we'll eventually
need to test that, even though it can only be a `#record{}`.
Another example would be `false | {value, term()}`, the return
value of lists:keyfind/3, which we're forced to flatten to `any`
since there's nothing in common between an atom and a tuple.
Union types let us express these types directly, greatly improving
type optimization.
|
|
|
|
Whenever there's a type conflict during type inference we know
that the branch will not be taken. Previously we'd go down the
branch with garbage type information which would crash in some
cases.
There's no test case for the crashes because the ones I've found
require union types to happen, and we already have good coverage
once they're in place.
|
|
When the compiler is smart enough to figure out that something
will always succeed, it will get rid of the failure branch, but
the inverse has not been possible because liveness optimization
could end up removing the instruction altogether (since it's never
used on the failure path), which is not okay when exceptions are in
the picture.
To prevent exception-generating instructions from being optimized
away when their branches are, we introduce a dummy instruction
that refers to the result on the failure path, ensuring that it
won't be optimized away.
|
|
|
|
The idea was to look at the argument types to see if we could get
rid of failure branches, but this didn't turn out to be useful and
the function ended up being a copy of erl_bifs:is_safe/3, so we may
as well get rid of it.
|
|
|
|
The previous implementation of infer_types had a general problem
with negative inference, and relied on an ugly hack to make simple
subtraction work for type tests. This gets rid of that hack and
makes it possible to subtract types on tuple size and element
comparisons.
|
|
|
|
|
|
|
|
The test was brainfart; integers that don't overlap *AT ALL*
should never meet. It's okay to meet as long as they overlap to
some degree.
|
|
|
|
Previously, we would build a large list of used
variables only to compute the intersection. This
commit changes it to compute the unused variables
from given a set which we then subtract from the
original set.
|
|
|
|
Without this, test cases which output control codes, or with names or
descriptions containing control codes, would cause the generated XML files to be
invalid.
|
|
Corrected calculation of buffer length for format(ed) string.
OTP-15817
|
|
The api_m_debug test case seems to trigger a gcc bug that
causes a segfault on an ancient Fedora 16 VM (with gcc
version 4.6.3-2). The simplest way to avoid this is to
test for this specific (gcc) version...
OTP-15817
|
|
Debug printouts is done to "dbgout", but the dbg macro
flushed "stdout" (which was the default). So, in order
to make the macro work properly in all cases, we rename
dbgout to esock_dbgout and make it extern (was static),
and then used that in the macro.
OTP-15817
|
|
* maint:
beam_ssa_bsm: Leave ?BADARG_BLOCK alone when cloning fail path
beam_ssa_opt: Do not apply tuple_size optimization outside guards
|
|
* john/compiler/fix-fail-path-exceptions-bsm/OTP-15946:
beam_ssa_bsm: Leave ?BADARG_BLOCK alone when cloning fail path
|
|
* john/compiler/fix-unsafe-tuple_size-opt/OTP-15945:
beam_ssa_opt: Do not apply tuple_size optimization outside guards
|
|
|
|
ERL-989: Fix typo in httpc_SUITE:content_length/1
|
|
|
|
|
|
|
|
Rewriting `tuple_size` to `is_tuple` + `tuple_size` will cause it
not to throw an exception, either crashing the compiler or the
emulator when the code runs.
|
|
* maint:
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
|
|
* maint-22:
Updated OTP version
Prepare release
# Conflicts:
# make/otp_version_tickets
|
|
* maint:
Updated OTP version
Prepare release
|
|
* maint-21:
Updated OTP version
Prepare release
# Conflicts:
# OTP_VERSION
# erts/doc/src/notes.xml
# erts/vsn.mk
# lib/ssl/doc/src/notes.xml
# lib/ssl/vsn.mk
# make/otp_version_tickets
# otp_versions.table
|
|
|
|
* ingela/ssl/alert-error-enhancment/OTP-15943:
ssl: Enhance error handling
|
|
* kostis/erl_syntax/fix-types:
erl_parse: Add documentation for exported types
erl_syntax: Fix some type declarations
erl_parse: Export some types needed for syntax_tools
|
|
The feature that depended on inets was not used
in practice since Edoc automatically includes all
references to projects in your code path. Plus
you can always link to an external document
directly.
Finally, as we move towards EEP 48, we will likely
rely more on the chunk information rather than
precompiled edoc-info.
|
|
* Release is_resizing as soon as possible to improve shrink concurrency.
- Do join of buckets after release, but with kept WLOCK_HASH.
- Do deallocations of seg and segtab after release
of both is_resizing and WLOCK_HASH.
* Do lazy initialization of buckets in extended segments.
- Mark inactive buckets in DEBUG.
|
|
* maint:
Updated stdlib runtime dependency to erts
Convert generated re replace and split tests from latin1 to UTF8
Adjust generated re replacement and split tests
Generate new re replacement and split tests using perl 5.22.1
Update internal PCRE to version 8.43
|
|
* rickard/pcre-8.43/OTP-15889:
Updated stdlib runtime dependency to erts
Convert generated re replace and split tests from latin1 to UTF8
Adjust generated re replacement and split tests
Generate new re replacement and split tests using perl 5.22.1
Update internal PCRE to version 8.43
|
|
|
|
* ingela/ssl/kill-openssl-zombie:
ssl: Kill OpenSSL processes that survived test run
|
|
We have hosts (mostly *very* slooow VMs) that can timeout
anything. Since we are basically testing communication,
we therefor must check for system events at every failure.
Grrr!
|
|
|
|
|
|
|
|
* poroh/erts/sched-stuck-fix/OTP-15941:
Infinite cycle fixed on try to change run queue (if it has already changed concurrently)
|
|
* sverker/system_info-procs-bug/ERL-979/OTP-15909:
Fix fatal bug in erts_proc_sig_signal_size
|
|
* ingela/ssl/TLS-hibernate-bug/OTP-15910:
ssl: Fix hibernation bug
# Conflicts:
# lib/ssl/src/tls_connection.erl
|