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.
|
|
|
|
* 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
|
|
* 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
|
|
|
|
* ingela/ssl/TLS-hibernate-bug/OTP-15910:
ssl: Fix hibernation bug
# Conflicts:
# lib/ssl/src/tls_connection.erl
|
|
* john/erts/lists_subtract_fixes/OTP-15938/OTP-15939:
erts: Fix integer overflow in loader
erts: Fix integer overflow in list subtraction
|
|
|
|
'josevalim/dialyzer/formatting_fallback/OTP-15922/PR-2240/ERL-949' into maint-22
* josevalim/dialyzer/formatting_fallback/OTP-15922/PR-2240/ERL-949:
Always fallback to source when we can't parse AST
|
|
* peterdmv/inets/httpc-uri-scheme/ERL-969/OTP-15930:
inets: Return error if URI has no scheme (httpc)
|
|
* peterdmv/ssl/fix-cert-error-handling/OTP-15900:
ssl: Fix handling of certificate decoding problems
|
|
* peterdmv/ssl/fix-sign-algs-cert/OTP-15913:
ssl: Backport fix for signature_algorithms_cert
|
|
* ingela/ssl/TLS-hibernate-bug/OTP-15910:
ssl: Fix hibernation bug
# Conflicts:
# lib/ssl/src/tls_connection.erl
|
|
* john/erts/lists_subtract_fixes/OTP-15938/OTP-15939:
erts: Fix integer overflow in loader
erts: Fix integer overflow in list subtraction
|
|
|
|
* siri/ct/release_test_paths/OTP-15934:
[ct] Store correct paths with from-release in ct_release_test
|
|
|
|
|
|
|
|
|
|
Make the test suite log more readable.
Normal io and the debug printouts from megaco does not mix well.
Its difficult to know the proper timeline. So add some "sleeps"
so that its easier to read.
|
|
|