Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
The function 'snmp:print_version_info/0' which prints
various (version) info, attempted to extract the
"compile time" of each module in the snmp app.
This info used to be availabe in the module_info of
each module, but has been removed (a "long" time ago).
This resulted in a pointless "Not Found" beeing printed.
This has now been removed from the into printed.
OTP-15330
|
|
|
|
|
|
OTP-15932
|
|
|
|
|
|
* maint:
Fix unstable test dump_SUITE:signal_abort
Fix unstable node_container_SUITE:magic_ref test
Fix unstable node_container_SUITE:node_controller_refc test
Fix unstable tests process_SUITE:no_priority_inversion{,2}
|
|
* rickard/test-fixes-21:
Fix unstable test dump_SUITE:signal_abort
Fix unstable node_container_SUITE:magic_ref test
Fix unstable node_container_SUITE:node_controller_refc test
Fix unstable tests process_SUITE:no_priority_inversion{,2}
|
|
Sometimes processes have not had the time to spread
from one scheduler. Force spread by using the undocumented
'scheduler' option.
|
|
* rickard/test-fixes-20:
Fix unstable node_container_SUITE:magic_ref test
Fix unstable node_container_SUITE:node_controller_refc test
Fix unstable tests process_SUITE:no_priority_inversion{,2}
|
|
|
|
|
|
Sometimes processes have not had the time to spread
from one scheduler. Force spread by using the undocumented
'scheduler' option.
|
|
Extend the compiler's type representation
|
|
* maint:
dialyzer: Remove native code compilation
hipe: Disable compilation on encountering try/catch
|
|
* john/hipe/catch-miscompilation/OTP-15949:
dialyzer: Remove native code compilation
hipe: Disable compilation on encountering try/catch
|
|
Eagerly extracting elements can be quite problematic now that we
have union types. Consider the following:
0:
%% _0 is {ok, #record{}} | {error,atom()}
_1 = get_tuple_element _0, literal 0
_2 = get_tuple_element _0, literal 1
switch _1, label 0, [ { literal ok, label 1 }, { literal error, label 2 } ]
1:
%% _0 is known to be {ok,#record{}} here
2:
%% _0 is known to be {error,atom()} here
The type pass is clever enough to see that _0 has the types noted
above, but because the type of _2 is set in the first block where
we didn't have that information yet, it's still #record{} | atom()
in both branches.
Sinking these instructions to when they are used greatly improves
the type information in many cases, but it does have a few
limitations and using it in both of the above branches would take
us back to square one.
|
|
If we know that the checked value is a singleton at the fail
block, it's safe to infer types as if we've made a direct
comparison against that value.
|
|
* sverker/hash-improve-shrink:
erts: Tweak hash shrink limit
erts: Improve hash shrinking
|
|
* Only shrink when we can remove one segment and still remain
below 50% table load.
* Only shrink down to two table segments. It just leads to a lot of
potentially "unnecessary" rehashing to have a chance of getting rid
of the last extra segment before the last delete op. I don't think
it's worth it.
|
|
|
|
* sverker/valgrind-hipe-suppression:
erts: Suppress valgrind warning in offset_heap_ptr
|
|
|
|
* sverker/ets_SUITE-fixtable_iter_bag:
stdlib: ets_SUITE:fixtable_iter_bag
|
|
Turns out the bug in ets:next() that I tried to provoke
with this new test wasn't really there. Oh well.
|
|
code_SUITE:upgrade would consistently fail in the HiPE case
because two clauses were mixed up. Disabling it altogether may
seem a bit harsh but we don't have the resources to fix it at the
moment.
|
|
Collect unused vars instead of used ones
|
|
|
|
|
|
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.
|
|
* 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
|