Age | Commit message (Collapse) | Author |
|
|
|
By first adding a call to error/1 to each uncovered line,
QuickCheck could find test cases that would cover the lines.
|
|
Make sure we don't optimize code such as:
is_tuple Fail Src
test_arity Fail Src Arity
get_tuple_element Src Pos Dst
is_map Fail Src
If we would reorder the instructions like this:
is_tuple Fail Src
test_arity Fail Src Arity
is_map Fail Src
get_tuple_element Src Pos Dst
beam_validator would complain that the type for Src is a map
instead of a tuple. Since the code has problems to begin with,
there is no need to do the optimization.
|
|
When calculating the sets of registers that must be killed or
unused, registers set in a {protected,_,_,_} block were not
considered. That could result in a crash in the
assertion in beam_utils:live_opt_block/4.
|
|
a3ec2644f5 attempted to teach v3_core not to generate code with
unbound variables. The approach taken in that commit is to
discard all expressions following a badmatch. That does not
work if the badmatch is nested:
{[V] = [] = foo,V},
V
That would be rewritten to:
{error({badmatch,foo})},
V
where V is unbound.
If we were to follow the same approach, the tuple construction
code would have to look out for a badmatch. As would list construction,
begin...end, and so on.
Therefore, as it is impractical to discard all expressions that
follow a badmatch, the only other solution is to ensure that the
variables that the pattern binds will somehow be bound. That can
be arranged by rewriting the pattern to a pattern that binds the
same variables. Thus:
error({badmatch,foo}),
E = foo,
case E of
{[V],[]} ->
V;
Other ->
error({badmatch,Other}
end
|
|
The following code:
simple() ->
case try 0 after [] end of
0 -> college;
1 -> 0
end.
would crash the compiler like this:
crash reason: {case_clause,
{'EXIT',
{function_clause,
[{beam_type,simplify_select_val_int,
[{select,select_val,
{x,0},
{f,7},
[{integer,1},{f,9},{integer,0},{f,8}]},
0],
[{file,"beam_type.erl"},{line,169}]},
{beam_type,simplify_basic_1,3,
[{file,"beam_type.erl"},{line,155}]},
{beam_type,opt,3,[{file,"beam_type.erl"},{line,57}]},
{beam_type,function,1,[{file,"beam_type.erl"},{line,36}]},
{beam_type,'-module/2-lc$^0/1-0-',1,
[{file,"beam_type.erl"},{line,30}]},
{beam_type,module,2,[{file,"beam_type.erl"},{line,30}]},
{compile,'-select_passes/2-anonymous-2-',2,
[{file,"compile.erl"},{line,521}]},
{compile,'-internal_comp/4-anonymous-1-',2,
[{file,"compile.erl"},{line,306}]}]}}}
The root cause is that the type representation is not well-defined.
Integers could be represented in three different ways:
integer
{integer,{1,10}}
{integer,0}
However, only the first two forms were handled.
To avoid similar problems in the future:
* Make the type representation stricter. Make sure that integers are
only represented as 'integer' or {integer,{Min,Max}}.
* Call verify_type/1 whenever a new type is added (not only when
merging types) to ensure that only the supported types are added
to the type database).
(ERL-150)
|
|
We must be careful how we treat the type info for the result of:
setelement(Index, Tuple, NewValue)
If Tuple had type information, the result of setelement/3 (in x(0))
would be assigned the same type information. But that is not safe
for:
setelement(1, Tuple, NewValue)
since the type for the first element will be changed.
Therefore, we must take care to remove the type information for
the first element of the tuple if might have been modified by
setelement/3.
|
|
As a preparation for better optimizations in beam_type, a list
literal must be accepted as a 'cons'.
|
|
As a preparation for upcoming better optimizations in beam_type,
we will need to keep better track of tuple literals so that
beam_validator will not falsely reject safe code.
|
|
* mururu/eunit/debugvalall/PR-1024/OTP-13612:
eunit: Add ?debugValAll macro
|
|
* egil/odbc/fix-unmatched_return/OTP-13595:
odbc: Fix unmatched return warnings
|
|
* lars/inets-deprecated-now/OTP-12441:
[inets] Remove calls to the inets_time_compat module
[inets] Remove usage of erlang:now()
|
|
|
|
|
|
|
|
* egil/xmerl/fix-unmatched_return/OTP-13595:
xmerl: Fix unmatched return warnings
|
|
* egil/percept/fix-unmatched_return/OTP-13595:
egd: Fix unmatched return warnings
egd: Small code style refactoring
percept: Fix unmatched return warnings
percept: Small code style refactoring
|
|
* dgud/tools/emacs/PR-1054/OTP-13610:
Fix line-initial commas' indentation in type specs
|
|
Inside type specs, line-initial commas shall align with open curly
braces. This also applies to record definitions with type specs for
the fields.
For example:
-type foo() :: { a :: integer()
, b :: integer()
}.
For type specs for functions, the commas shall align with the opening
parenthese. So do a closing parenthese when put on a new line.
For example:
-spec foo( X :: integer()
, Y :: integer()
) -> integer().
This does not affect coding styles that don't put commas at the
beginning of lines.
|
|
* hasse/erl_docgen/datatype_anchors/OTP-13600/ERL-141:
kernel: Remove no longer needed anchors in documentation
stdlib: Remove no longer needed anchors in documentation
erts: Remove no longer needed anchors in documentation
erl_docgen: Add anchors to datatypes without name attribute
|
|
* bjorn/handle-bad-path/ERL-142:
Tolerate bad directories in the code path
|
|
* bjorn/erts/raise-doc/OTP-13599:
Remove the warning about using erlang:raise/3
|
|
* bjorn/erts/cuddle-with-tests:
time_SUITE: Make consistency/1 work in any timezone
|
|
|
|
This merge is actually only some left overs.
The bulk work for hipe-amd64-code-alloc has already been
merge (without ticket number) at 42a1166b47721cd444.
|
|
|
|
Second merge of this branch to master
with some more docs
|
|
* mikpe/otp-19-erts-integer-truncation-bugs/PR-1045/OTP-13606:
erl_unicode.c: fix integer truncation problems
do not limit heap fragments to 4 giga-words
erts_new_mso_binary(): do not truncate len
Conflicts:
erts/emulator/beam/erl_nif.c
|
|
|
|
* lukas/erts/max_heap_fix_erllvm/OTP-13174:
erts: Move max_heap_size field so that ErLLVM works again
|
|
|
|
* lukas/erts/re-openbsd-gcc-bug/OTP-13602:
erts: Fix OpenBSD gcc compiler bug in re code
|
|
The OpenBSD 5.8 gcc compiler emits erroneous code
which results in the re:run function behaving badly,
though strangely enough it does not segfault the vm.
This fix moves code around a bit in order to make gcc
emit correct code.
|
|
* lukas/erts/tracing/fix-non-smp-trace/OTP-13503:
erts: Fix erl_tracer xml doc errors
erts: Fix bug when tracing in non-smp non-scheduler thread
|
|
|
|
|
|
* dgud/wx/cmd-queue-bug:
Fix compilation warning
wx: Fix generated defines in gl.hrl
wx: Fix driver command queue
|
|
* jrobhoward/os_mon/fix-freebsd_get_os_wordsize/PR-1039/OTP-13601:
Fix memsup:get_os_wordsize() on 64-bit Linux PPC
os_mon: Test wordsize of memsup:get_os_wordsize/0
Fix memsup:get_os_wordsize() on 64-bit FreeBSD
|
|
|
|
|
|
* origin/ingela/public_key/tests:
public_key: Remove test_server config macros and unsed hooks
|
|
|
|
|
|
|
|
|
|
|
|
db_html.xsl generates anchors for data types referred to by strings
(instead of 'name' attributes). For example:
<datatype>
<name>edge()</name>
</datatype>
generates:
<p><a name="type-edge"><span class="bold_code">edge()</span></a><br></p>
|
|
* egil/egd/improve-line/OTP-13598:
egd: Save images during tests
egd: Use anti-aliasing for lines
egd: Add more line tests
egd: Add line thickness algorithm for lines
egd: Use maps to map height to line spans
egd: Refactor precompile objects
egd: Refactor object_on_line
egd: Refactor primitives style
egd: Improve span calculation
|
|
* ingela/inets/dialyzer:
inets: httpd_util:split does not return {error, Reason}
|
|
* hairyhum/eldap/ignore_tcp_errors_at_close/PR-1048/OTP-13590:
indentation
Ignore tcp errors during close request to eldap
|