Age | Commit message (Collapse) | Author |
|
* mururu/os_mon/cpu-sup-osx/PR-1049/OTP-13597:
os_mon: Implement cpu_sup:util/0,1 on OSX
|
|
* egil/common_test/fix-doc-lint:
common_test: Fix doc tags of ct_netconfc
|
|
* ingela/ssl/cipher-suites-refactor:
ssl: Refactor to make code easier to understand
|
|
* kostis/dialyzer/opaque_type/OTP-13586/PR-1047:
Declare the erl_types:var_table() type as opaque
|
|
* bjorn/compiler/beam_bool/ERL-143:
Eliminate crash in beam_bool
Add beam_bool_SUITE
Add missing test cases in andor_SUITE and beam_block_SUITE
|
|
* bjorn/compiler/misc:
beam_utils: Correct break in conventions for split_even/1 and join_even/1
beam_utils: Remove clause checking for illegal set/4 instruction
beam_utils: Simplify the return value for check_liveness/3
beam_utils: Remove unused code
beam_utils: Let code_at/2 fail if the label does not exist
beam_utils: Remove unused handling of try/3 in live_opt/4
beam_utils: Correct translation of BIFs to tests
core_pp: Remove uncovered clause in is_simple_term/1
core_pp: Crash on unhandled Core Erlang forms
core_pp: Remove unused clauses in unindent/3 to improve coverage
core_pp: Remove useless try...catch
core_pp: Simplify printing of map literals
compile_SUITE: Cover numeric variable names in core_pp
compile_SUITE: Eliminate clones when re-compiling test suites
test_lib: Add is_cloned_mod/1
trycatch_SUITE: Cover the only uncovered line in sys_core_fold
test_lib: Correct calculation of number of processes
|
|
beam_bool would crash when attempting to optimize BEAM code similar
to this code:
bif '=:=' Reg1 SomeValue => y(0)
bif '=:=' Reg2 {atom,true} => x(2)
bif '=:=' Reg3 {atom,true} => x(3)
bif 'or' x(2) x(3) => x(2)
is_eq_exact Fail x(2) {atom,true}
The problem is that the first instruction that assigns a value to a Y
register. beam_bool:ssa_assign/2 will not accept a Y register
argument.
We could change ssa_assign/2 to accept a Y register, but that would
only cause the entire optimization to be rejected later because the Y
register is alive in the code that follows. Therefore, a better
solution is to modify extend_block/3 so that the instruction that
assign to Y registers are not added to the block. That is, the
optimizer will only operate on the following code:
bif '=:=' Reg2 {atom,true} => x(2)
bif '=:=' Reg3 {atom,true} => x(3)
bif 'or' x(2) x(3) => x(2)
is_eq_exact Fail x(2) {atom,true}
Usually the optimization will succeed, rewriting the four instructions
to a select_val instruction.
Assembly code such as the above can be produced by code similar to:
Y = Something == SomethingElse,
case Y of
Condition; OtherCondition ->
. . .
end,
. . .,
Y.
Reported-by: http://bugs.erlang.org/browse/ERL-143
Reported-by: José Valim
|
|
It's time that we have a dedicated test suite for beam_bool.
|
|
Two test cases were not actually run. Even if their main purpose is to
ensure that the compiler doesn't crash, we always try to also run the
test case (when practial) to also ensure that the generated code is
correct.
|
|
|
|
* egil/erts/nif-format_term/OTP-13580:
runtime_tools: Change erts_snprintf to enif_snprintf
erts: Document enif_snprintf
erts: Add tests for enif_snprintf
erts: Add enif_snprintf
Conflicts:
erts/emulator/beam/erl_nif_api_funcs.h
|
|
* egil/tools/fix-unmatched_return/OTP-13595:
xref: Fix unmatched return warnings
tags: Fix unmatched return warnings
lcnt: Fix unmatched return warnings
fprof: Fix unmatched return warnings
fprof: Fix unmatched return warnings
eprof: Fix unmatched return warnings
cover: Fix unmatched return warnings
|
|
* egil/runtime_tools/fix-unmatched_return/OTP-13595:
runtime_tools: Fix unmatched return warnings
|
|
* egil/os_mon/fix-unmatched_return/OTP-13595:
os_mon: Fix unmatched return warnings
|
|
* egil/et/fix-doc-lint:
et: Fix linting documentation xml tags
|
|
* egil/runtime_tools/fix-doc-lint:
runtime_tools: Fix tags of dbg reference manual
runtime_tools: Fix tags of LTTng User's Guide
|
|
* egil/percept/fix-ug-doc:
egd: Fix User's Guide lint
|
|
Exported functions in this file should appear at the top of the file.
Also add missing spaces after commas.
|
|
I can't remember that clause ever trigger during development.
Remove it to eliminated an uncovered line.
|
|
check_liveness/3 returns {unknown,State} if an instruction is
not handled. All callers will handle 'unknown' the same way as
'used'. Therefore, we can simplify the code and improve the
coverage if we return {used,State} instead of {unknown,State}.
|
|
|
|
All callers only calls code_at/2 for existing labels and they don't
handle the return value 'none'.
|
|
30cc5c902d moved try/3 instruction inside blocks, so the clause for
handling try/3 in live_opt/4 is never executed.
|
|
Two lines were never covered, because '[]' was used instead of 'nil'.
|
|
The clause for handling #c_values{} in is_simple_term/1 is never
executed. It can be safely removed, since there is a default clause
that will return 'false' in the extremly unlikely event that a
Without the clause, code such as:
let <_v1,_v2> = <1,2>
in {_v1,_v2}
would be printed with an extra newline:
let <_v1,_v2> =
<1,2>
in {_v1,_v2}
|
|
Don't try to be nice. Since we now have good test suites for
Core Erlang, just let it crash.
|
|
|
|
We will get more information if we don't catch the exception.
|
|
Map patterns are never represented as literals. Therefore, a map
literal should always be printed with the 'assoc' operator. That also
means that there is no remaining use of the 'class' field and that it
can be removed from the 'ctxt' record.
|
|
The inliner generates variable whose names are numeric. Run
the inliner to cover one more line in core_pp.
|
|
Several test cases in compile_SUITE (e.g. core/1) extracts the
abstract code from a BEAM file and runs the compiler on it.
It is only a waste of time to use the abstract code from
cloned versions of test case modules. That is, use record_SUITE,
but don't use record_no_opt_SUITE, record_post_opt_SUITE, or
record_inline_SUITE since they all contain essentially the same
abstract code.
|
|
Add is_cloned_mod(Mod) to determine whether Mod is the original
name for a module (e.g. record_SUITE) or a cloned module
(e.g. record_no_opt_SUITE).
|
|
Recent spring cleaning in the test suite left a line in sys_core_fold
dealing with an unnecessary catch uncovered.
|
|
Correct calculation of the number of parallel processes to use
when cover is used. It was supposed not to exceed 4 (according to
the comment), but it was calculated as the number of schedulers.
On my computer, having 8 schedulers, this change made the compiler
test suite with cover run almost twice as fast.
|
|
* bjorn/asn1/dialyzer-warnings/OTP-13579:
Eliminate dialyzer warnings for unmatched returns
|
|
* bjorn/common_test/dialyzer-warnings:
ct_logs: Eliminate dialyzer warnings
|
|
* mururu/stdlib/fix-deprecated-warnings/PR-1050/OTP-13594:
Fix deprecated warnings
|
|
* bjorn/compiler/badfun-literal/ERL-138/OTP-13552:
sys_core_fold: Don't generated failing calls such as 3(4)
fun_SUITE: Test for failing calls to funs
|
|
|
|
|
|
|
|
Dialyzer's dependency calculation was throwing an error when
encountering an 'apply' node with something that was not a variable
(e.g., a literal). The rest of the code did not know what to do with
this error, which resulted in dialyzer crashing. Fix this by ingoring
the detected error in the dependency calculation phase; later dialyzer
passes know how to properly handle and report this kind of errors
anyway.
This fixes [Erlang-JIRA] (ERL-138).
|
|
Fix mistakes found by 'xmllint'.
|
|
Fix mistakes found by 'xmllint'.
|
|
|
|
|
|
|
|
|
|
|
|
Rewrite code such as:
X = not_a_fun,
X()
to:
error({badfun,not_a_fun})
Also generate a warning.
|