Age | Commit message (Collapse) | Author |
|
The following module produced erroneous results when compiled with HiPE:
-module(a).
-export([foo/1]).
foo(X) when is_number(X) ->
is_integer(X).
Running:
1> c(a).
2> a:foo(0).
true
3> hipe:c(a).
4> a:foo(0).
false % *** WRONG ***
The problem was that the 'number' case for the `hipe_icode:type_test/1`
was going to the default case where the argument was determined as being
something other than an integer. Thanks to Sebastian Egner and Johannes
Weißl for bringing the bug into attention. Fixed on the day it was reported.
|
|
|
|
Conflicts:
lib/diameter/autoconf/vxworks/sed.general
xcomp/README.md
|
|
|
|
|
|
|
|
|
|
|
|
* maint:
Update to work with space in include path
Update to work with whitespace in exec path
|
|
OTP-10106
OTP-10107
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Compiling single functions (as opposed to whole modules) to native
code complicates code management in HiPE. It would also vastly
complicate whole-module optimizations, such as returning multiple
return values instead of tuples within a module.
As a first step, remove the external interface for the single
compilation feature. In the future, there are many things that
could be restructured and simplified.
|
|
|
|
Conflicts:
erts/aclocal.m4
erts/include/internal/ethread_header_config.h.in
|
|
Pattern matching of floats with variable size (<<F:S/float>>) did
always fail. Judging from similar code for ints, this bug is simply
a typo.
|
|
|
|
Introduce the line/1 instruction in the compiler and the BEAM
virtual machine. It will not yet be generated by the compiler and
will not actually carry any information.
|
|
|
|
* ks/hipe-icode-range-fix:
Cleanup specs
Fix bug in the simplification of inexact comparisons
Various cleanups and cosmetic changes
OTP-9101
|
|
|
|
On 31/1/2011 Paul Guyot reported a bug in the native code compilation
of inexact equality/inequality tests between floats and integers. The
relevant test was:
f(X) ->
Y = X / 2,
Y == 0.
and hipe erroneously evaluated the calls f(0) and f(0.0) to 'false'.
The culprit was in the simplification code of the Icode range analysis
which used an erroneous test (lists:any/1 instead of lists:all/1).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Resolve name clash with auto-imported BIFs min/2 and max/2.
|
|
This fixes a problem in the HiPE compiler's BEAM-to-Icode
pass where it can crash due to the BEAM compiler's merging
of identical basic blocks with different exception handling
contexts. This bug has been latent, but is now exposed by
what appears to be more aggressive optimizations in BEAM.
The added comment explains things in more detail.
|
|
put_literal/2 was an experimental instruction added in R11 to
support literals, but before the R12 release support for literals
was implemented for all instruction, making the put_literal/2
instruction redundant. Although the beam_disasm module supports
dissambley of instructions in older releases, there is
no reason to have it support experimental instructions.
|
|
bs_bits_to_bytes2/2 was an experimental instruction added in R11,
but was removed in R12. Although the beam_disasm and beam_validator
modules do support instructions in older releases, there is
no reason to have them support experimental instructions.
|
|
The bug was introduced in d60f055697cfe8e7f94be4d291d49bb00a66bc52.
|
|
* bg/opt-receive:
Test that gen_server:call/2,3 are fast even with a huge message queue
erts: Add tests for the receive optimization
Update primary bootstrap
erts: Implement recv_mark/1 and recv_set/1 for real
compiler tests: Cover the error handling code in beam_receive
compiler test: Test optimization of receive statements
Optimize selective receives in the presence of a large message queue
Introduce the new recv_mark/1 and recv_mark/1 instructions
Compile tests that communicate with R12 nodes with the r12 option
Move p_run/2 to test_lib
gen: Inline wait_resp_mon/2 to help the compiler optimize
OTP-8623 bg/opt-receive
reveive statements that can only read out a newly created reference are now
specially optimized so that it will execute in constant time regardless of
the number of messages in the receive queue for the process. That
optimization will benefit calls to gen_server:call(). (See gen:do_call/4
for an example of a receive statement that will be optimized.)
|
|
|
|
Make the recv_mark/1 and recv_mark/1 instructions known to the
compiler and run-time system. For the moment, make the loader ignore
any occurrences of those instructions in BEAM files.
Also update hipe_beam_to_icode to ignore those instructions.
|
|
environment after a number of bugs are fixed and some features
are added in the documentation build process.
- The arity calculation is updated.
- The module prefix used in the function names for bif's are
removed in the generated links so the links will look like
http://www.erlang.org/doc/man/erlang.html#append_element-2
instead of
http://www.erlang.org/doc/man/erlang.html#erlang:append_element-2
- Enhanced the menu positioning in the html documentation when a
new page is loaded.
- A number of corrections in the generation of man pages (thanks
to Sergei Golovan)
- Moved some man pages to more apropriate sections, pages in
section 4 moved to 5 and pages in 6 moved to 7.
- The legal notice is taken from the xml book file so OTP's
build process can be used for non OTP applications.
|
|
|