Age | Commit message (Collapse) | Author |
|
Parameterized modules are not supported by HiPE.
|
|
Attempting to call is_record/3 (without an erlang: prefix) from a
guard if there was a local function named is_record/3 would cause
a compiler crash. For consistency with other guard tests, disallow
the call.
is_record/2 in a guard will still be allowed (and work correctly)
even if there is a local is_record/2. It could be argued that
is_record/2 should be handled in the same way as is_record/3,
but changing that now could break working code.
|
|
Consistently use external (remote) calls to the BIFs element/2,
setelement/3, and is_record/3.
|
|
If a guard test (such as is_list/1) has a local definition in a
module (or is imported), erl_lint will reject a call to it from
a guard if the call is not at the top-level:
foo(L) when is_list(L) =:= true -> %% Will be rejected.
ok.
is_list(_) -> ok.
But if the call is at the top-level, it will be accepted (and
cause a crash in a later compiler pass):
foo(L) when is_list(L) -> %% Will be accepted by erl_lint
ok.
is_list(_) -> ok.
This inconsistency was an oversight introduced when it became
possible to override BIFs with local definitions.
|
|
* sverk/wait_for_test_procs:
stdlib: Enable unused 'end_per_testcase' in ets_SUITE
|
|
Supervisor should never keep child specs for dead temporary children.
|
|
Also added more information when waiting for test proc to die
|
|
|
|
Also, some minor debug help is added to a test case which fails every
now and then.
|
|
|
|
The new file lib/stdlib/test/qlc_SUITE_data/join_info_compat.erl was
created on an R12B node.
|
|
* bjorn/compiler/options/OTP-9752:
filename documentation: Recommend against using filename:find_src/1,2
Teach filename:find_src/1,2 to handle slim or stripped BEAM files
filename: Eliminate failing call to Mod:module_info(source_file)
filename.erl:filter_options/1: Remove handling of dead options
compiler: Don't include {cwd,_} in module_info(compile)
compiler: Don't include source code options in module_info(compile)
hipe: Teach hipe to handle slim or stripped BEAM files
|
|
filename:find_src/1,2 will crash when asked to find the source
corresponding to a BEAM with no compilation options. A BEAM file
can be missing compilation options if it has been stripped using
beam_lib:strip/1 or compiled using the undocumented 'slim' option.
Why this matters: If ERL_COMPILE_OPTIONS is set to +slim before
building Erlang/OTP, there will be a crash in 'igor' during the
building of the public_key application. ('igor' merges several
source code files, and uses filename:find_src/1,2 to find the
source code.)
Change filename:find_src/1,2 to return an empty option list if
there are no options in the BEAM file.
Noticed-by: Per Hedeland
|
|
|
|
* pan/binary_match_scope/OTP-9701:
Remove remaining gcc 4.6 assigned-but-not-used warnings from erts
Remove GCC 4.6 set-but-not-used warning from erl_bif_binary
Make binary:match with scope return correct values
|
|
* sverk/hipe-without-fpe/OTP-9724:
otp_build: Disable FPE by default on Linux
stdlib: Make sure qlc_SUITE:otp_6964 restores backtrace_depth
erts: Add test for inf/NaN intermediate float results
hipe,erts: Allow hipe without floating point exceptions
hipe: Fix bug in hipe_rtl_lcm:calc_killed_expr_bb
erts: Rename macros used by float instructions without FPE
|
|
* siri/sasl/upgrade-erts/OTP-9438:
Fix bug in erts upgrade on windows
Add release vsn info to erts_vsn_changed warning
Check for sasl application in systools:make_script and make_relup
Add syntax check of relup to check_install_release and install_release
Add documentation for upgrade from pre R15 to post R15 sasl
Handle upgrade from pre R15 to post R15 sasl
Step version of sasl to 2.2 for R15
Document upgrade instructions restart_new_emulator and restart_emulator
Wait for two restarts in upgrade_restart test
Add restart_new_emulator instruction to kernel, stdlib and sasl appups
Distinguish restart_new_emulator from restart_emulator in upgrade instructions
Upgrade erts: merge sys.config for tmp release instead of using old
Allow regexp for version in .appup
Restart emulator before running upgrade script when erts is upgraded
Conflicts:
lib/sasl/src/release_handler.erl
lib/sasl/test/release_handler_SUITE.erl
|
|
The appup files for kernel, stdlib and sasl did not contain any
UpFromVsn and DownToVsn. This means that it was not possible to create
a relup file with systool:make_relup if any of these applications had
changed.
This commit adds entries in the appup files for a maximum of two major
releases back - all with only one upgrade instruction:
restart_new_emulator. The point is to allow relups to be generated,
but ensure that no soft upgrade is done for these three applications -
i.e. they will always cause a restart of the emulator prior to all
other upgrade instructions from other applications.
Test cases (appup_test) are added to kernel_SUITE, stdlib_SUITE and
sasl_SUITE. These all check that expected versions are matched in the
appups, and illegal versions (older than two major releases, or in any
other way illegal) do not match. The test is written in a general way
where it is assumed that the version of these applications are stepped
according the the rule that major releases step the second number,
maintenance releases step the third number and patches step the fourth
number.
|
|
|
|
|
|
|
|
Calls to global:whereis_name/1 have been substituted for calls to
global:safe_whereis_name/1 since the latter is not safe at all.
The reason for not doing this earlier is that setting a global lock
masked out a bug concerning the restart of supervised children. The
bug has now been fixed by a modification of global:whereis_name/1.
(Thanks to Ulf Wiger for code contribution.)
|
|
* rickard/alloc-opt/OTP-7775:
Optimize memory allocation
Conflicts:
erts/aclocal.m4
erts/emulator/hipe/hipe_bif_list.m4
erts/preloaded/ebin/erl_prim_loader.beam
erts/preloaded/ebin/erlang.beam
erts/preloaded/ebin/init.beam
erts/preloaded/ebin/otp_ring0.beam
erts/preloaded/ebin/prim_file.beam
erts/preloaded/ebin/prim_inet.beam
erts/preloaded/ebin/prim_zip.beam
erts/preloaded/ebin/zlib.beam
|
|
A number of memory allocation optimizations have been implemented. Most
optimizations reduce contention caused by synchronization between
threads during allocation and deallocation of memory. Most notably:
* Synchronization of memory management in scheduler specific allocator
instances has been rewritten to use lock-free synchronization.
* Synchronization of memory management in scheduler specific
pre-allocators has been rewritten to use lock-free synchronization.
* The 'mseg_alloc' memory segment allocator now use scheduler specific
instances instead of one instance. Apart from reducing contention
this also ensures that memory allocators always create memory
segments on the local NUMA node on a NUMA system.
|
|
Currently, the external fun syntax "fun M:F/A" only supports
literals. That is, "fun lists:reverse/1" is allowed but not
"fun M:F/A".
In many real-life situations, some or all of M, F, A are
not known until run-time, and one is forced to either use
the undocumented erlang:make_fun/3 BIF or to use a
"tuple fun" (which is deprecated).
EEP-23 suggests that the parser (erl_parse) should immediately
transform "fun M:F/A" to "erlang:make_fun(M, F, A)". We have
not followed that approach in this implementation, because we
want the abstract code to mirror the source code as closely
as possible, and we also consider erlang:make_fun/3 to
be an implementation detail that we might want to remove in
the future.
Instead, we will change the abstract format for "fun M:F/A" (in a way
that is not backwards compatible), and while we are at it, we will
move the translation from "fun M:F/A" to "erlang:make_fun(M, F, A)"
from sys_pre_expand down to the v3_core pass. We will also update
the debugger and xref to use the new format.
We did consider making the abstract format backward compatible if
no variables were used in the fun, but decided against it. Keeping
it backward compatible would mean that there would be different
abstract formats for the no-variable and variable case, and tools
would have to handle both formats, probably forever.
Reference: http://www.erlang.org/eeps/eep-0023.html
|
|
|
|
* rc/epp-include-path-fix:
Make epp search directory of current file first when including another file
OTP-9645
|
|
* hl/fix-ms_transform-scope-warn:
ms_transform: Fix incorrect `variable shadowed' warnings
OTP-9646
|
|
* cf/simple_one_for_one_shutdown:
Explain how dynamic child processes are stopped
Stack errors when dynamic children are stopped
Explicitly kill dynamic children in supervisors
Conflicts:
lib/stdlib/doc/src/supervisor.xml
OTP-9647
|
|
* cf/supervisor_shutdown_infinity:
Add a warning to docs about workers' shutdown strategy
Allow an infinite timeout to shutdown worker processes
OTP-9648
|
|
* bjorn/unicode-noncharacters/OTP-9624:
Allow noncharacter code points in unicode encoding and decoding
|
|
The expected behaviour of a C-style preprocessor (such as Erlang's epp) is
to allow a header file to include another header file in the same directory
even though that directory is not explicitly in the include path, and even
if the actual include path might reference another directory containing a
file with the same name. For example, if src/foo.erl explicitly includes
"../include/foo.hrl", then foo.hrl should be able to include "bar.hrl" in
that same directory even though "../include" might not be in the search
path, and even if another file named bar.hrl could be found using the search
path it should not override the one in the same directory as foo.hrl.
In Erlang, the most common situation is that a user of an installed
application includes a main public header file using include_lib
("appname/include/foo.hrl") and that file includes a secondary header file
"bar.hrl". However, if it does this using include_lib, it causes a
bootstrapping problem - in the build environment for the application itself,
the application is not necessarily found by name. On the other hand, if
foo.hrl uses a plain include, then bar.hrl might be found when the
application is built (if explicit paths are set in the makefils) but not
later on when a user includes the main header file of the installed
application via include_lib.
By making -include always look in the directory of the current file before
it uses the search path, this problem is remedied, and include directives
behave in a more intuitive way.
This completes a partial fix in R11 that only worked for include_lib().
|
|
A Dets table with sufficiently large buckets could not always be repaired.
(Reported by Gordon Guthrie.)
The format of Dets files has been modified. When downgrading tables
created with the new system will be repaired. Otherwise the
modification should not be noticeable.
|
|
The two noncharacter code points 16#FFFE and 16#FFFF were not
allowed to be encoded or decoded using the unicode module or
bit syntax. That causes an inconsistency, since the noncharacters
16#FDD0 to 16#FDEF could be encoded/decoded.
There is two ways to fix that inconsistency.
We have chosen to allow 16#FFFE and 16#FFFF to be encoded and
decoded, because the noncharacters could be useful internally
within an application and it will make encoding and decoding
slightly faster.
Reported-by: Alisdair Sullivan
|
|
Now, in child specification, the shutdown value can also be set to infinity
for worker children. This restriction was removed because this is not always
possible to predict the shutdown time for a worker. This is highly
application-dependent.
|
|
If a Dets table had been properly closed but the space management data
could not been read, it was not possible to repair the file.
|
|
* bjorn/line-numbers/OTP-9468:
beam_lib_SUITE: Don't assume that "Abst" is the last chunk
test_server: Show line number for caller of test_server:fail()
|
|
* dev:
distribution_SUITE:bulk_send_bigbig/1: Fail with more information
distribution_SUITE: Use unique slave node names
beam_lib: Handle rare race in the crypto key server functionality
busy_port_SUITE: Avoid crash in register/2
[wx] Re-generate code
[wx] Remove optional shadowing clauses
[wx] Remove warning
[wx] Fix trailing whitespace
[wx] Test colors in textctrl
[wx] Fix cleanup memory references
|
|
In rare circumstances, there can be a race when the crypto key server
is started by beam_lib:crypto_key_fun/1 shortly after stopping it
using beam_lib:clear_crypto_key_fun/0. The race occurs because
the crypto key server first sends back the reply to the calling
process, then terminates. (The race is probably more likely to happen
on CPUs with hyper threading.)
|
|
* dev:
tar_SUITE: Work around limited pathname length on Windows
Merge the fourth bootstrap stage into the third bootstrap stage
Remove unused lib/orber/include/Makefile
Remove lib/orber/include/* from the primary bootstrap
otp_build update_primary: Don't commit generated source files
primary bootstrap: Remove source files
Conflicts:
Makefile.in
bootstrap/bin/start.script
bootstrap/bin/start_clean.script
bootstrap/lib/compiler/ebin/compiler.app
bootstrap/lib/compiler/egen/beam_opcodes.erl
bootstrap/lib/compiler/egen/core_parse.erl
bootstrap/lib/kernel/ebin/kernel.app
bootstrap/lib/kernel/ebin/kernel.appup
bootstrap/lib/orber/include/Makefile
bootstrap/lib/orber/include/corba.hrl
bootstrap/lib/orber/include/orber_pi.hrl
bootstrap/lib/stdlib/ebin/stdlib.app
bootstrap/lib/stdlib/ebin/stdlib.appup
bootstrap/lib/stdlib/egen/erl_parse.erl
|
|
* bjorn/stdlib/fix-tar_SUITE:
tar_SUITE: Work around limited pathname length on Windows
|
|
* dev:
Cleanup ETS bif's in hipe:erl_bif_types.erl (for dialyzer)
Conflicts:
erts/emulator/beam/erl_db.c
|
|
* pan/erl-bif-types/OTP-9496:
Cleanup ETS bif's in hipe:erl_bif_types.erl (for dialyzer)
|
|
According to the supervisor's documentation:
"Important note on simple-one-for-one supervisors: The dynamically
created child processes of a simple-one-for-one supervisor are not
explicitly killed, regardless of shutdown strategy, but are expected
to terminate when the supervisor does (that is, when an exit signal
from the parent process is received)."
All is fine as long as we stop simple_one_for_one supervisor manually.
Dynamic children catch the exit signal from the supervisor and leave.
But, if this happens when we stop an application, after the top
supervisor has stopped, the application master kills all remaining
processes associated to this application. So, dynamic children that trap
exit signals can be killed during their cleanup (here we mean inside
terminate/2). This is unpredictable and highly time-dependent.
In this commit, supervisor module is patched to explicitly terminate
dynamic children accordingly to the shutdown strategy.
NOTE: Order in which dynamic children are stopped is not defined. In
fact, this is "almost" done at the same time.
|
|
Ever since the test suites were converted to the common_test
convention, the tests for long names started to fail on Windows. The
reason is that those test cases depend on the current working
directory, and that the current working directory in common_test test
cases is usually set to a directory with a longer pathname than in
test_server test suites.
Since neither Erlang/OTP nor common_test provides a portable way
to create a temporary directory with a short name, we will have to
abuse priv_dir by going upwards from it. For further information,
see the comment in run_in_short_tempdir/2.
|
|
* dev:
Add a high value to test data to catch type cast truncation errors
|
|
* lukas/erts/ets_order_testcases/OTP-9459:
Add a high value to test data to catch type cast truncation errors
|
|
"Line" is now the last chunk in a BEAM file, causing
beam_lib_SUITE:error/1 to fail. To avoid being bitten by this problem
again, don't simply change "Abst" to "Line", but use beam_lib:info/1
to find out the name of the last chunk.
|
|
|
|
Compile below module resulting incorrect warning:
$ cat tmp.erl
-module(tmp).
-export([tmp/1]).
-include_lib("stdlib/include/ms_transform.hrl").
tmp(X) when X > 100 ->
Y=X,
Y;
tmp(X) ->
ets:fun2ms(fun(Y) -> {X, Y} end).
$ erlc tmp.erl
./tmp.erl:8: Warning: variable 'Y' shadowed in ms_transform fun head
The scope for a variable is its function clause. Variables bound in one
function clause should not interfere with other function clauses.
This patch removes incorrect passing of variable bindings from one
function clause to another.
Signed-off-by: Haitao Li <[email protected]>
|