Age | Commit message (Collapse) | Author |
|
|
|
* nox/maps-fix-beam_bool-put_map:
Properly collect labels in put_map instructions in beam_bool
|
|
* nox/maps-expand-update:
Fix expansion of map update arguments
|
|
* nox/compiler/v3_core-mismatched-apply:
Do not emit blatantly illformed Core Erlang apply expressions
|
|
* nox/compiler/sys_core_fold-erlang-is_record-3:
Do not mark all calls to erlang:is_record/3 as safe
|
|
* bjorn/hipe/fix-race-condition:
Delay patching of closures to eliminate a race condition
hipe: Break apart hipe_bif:make_fe/3 into two BIFs
|
|
* hb/stdlib/qlc_fix/OTP-11758:
Fix a qlc bug where filters were erroneously optimized away
|
|
The deprecation of the built-in types dict/0 and so on had as
side-effect that it was impossible to switch to dict:dict/2 and so on
without getting warnings either in the the previous release (R16B) or
the current one (17.0).
By including the attribute
-compile(nowarn_deprecated_type).
in an Erlang source file warnings about deprecated types can be
avoided in 17.0.
The option can also be given as a compiler flag:
erlc +nowarn_deprecated_type file.erl
|
|
|
|
* ia/ssl/proplist-input-check/OTP-11760:
ssl: Add input sanity check
|
|
Avoid puzzling behavior due to options being disregarded if they
are not key value tuples.
|
|
Reported-by: Ulf Norell
|
|
Silly code such as the following could make the compiler crash:
f() when erlang:float(self()); true -> ok.
Reported-by: Ulf Norell
|
|
Map fields are put in their own function instead of being clauses of expr/3.
Also, invalid map construction expressions now emit one error per ':=' field,
at the location of said field instead of one for the whole expression,
furthermore, such warnings do not stop linting of their key and value
expressions anymore. Ill-formed maps constructions are now also properly
detected in guard expressions.
|
|
Reported-by: Ulf Norell
|
|
* ia/ssl/doc-imp/OTP-11759:
ssl: Improved documentation of the cacertfile option
|
|
|
|
* egil/fix-maps-eq:
erts: Fix Map cmp exact equal of an empty map
|
|
* egil/fix-compiler-error-msg:
compiler: Fix error message printout on compile error
|
|
Thanks to Sam Bobroff for reporting the bug.
|
|
Calls to erlang:is_function/2 where the second is not a literal nonnegative
integer can crash at runtime and thus can't be marked as safe.
|
|
Calls to erlang:is_record/3 where the second and third arguments are not
respectively a literal atom and a literal integer can't be transformed to guards
and thus are not safe.
Reported-by: Ulf Norell
|
|
(fun f/1)() should be compiled to let X = 'f'/1 in apply X () to let the compiler
properly generate code that will fail with badarity at runtime.
Reported-by: Ulf Norell
|
|
Shortcircuiting operators are not real functions and can't be used as
such with erlang:'andalso'(...) and erlang:'orelse'(...).
Reported-by: Ulf Norell
|
|
Reported-by: José Valim
|
|
|
|
|
|
|
|
Use correct stack in printout.
|
|
Several tests cases would typically fail because of a timetrap
timeout on our older test machines running with a Linux kernel
with a lower version than 2.6.30 and the ext3 file system.
In http://lwn.net/Articles/328363/, the author desribes peformance
issues with ext3 that were fixed in 2.6.30.
Since common_test nowadays has a default timetrap timeout, there
is no need to explicitly set a timeout in each test case (except
for prolonging the default timeout).
|
|
Compiled with --enable-native-libs, 2 minutes may not be enough
time on a slow computer to finish bs_match_bin_SUITE/1.
|
|
|
|
This will also eliminate a dialyzer warning for unmatched returns,
and increase the coverage.
|
|
The error checking code for INTEGER and BIT STRING was broken,
since it built an error tuple that was never returned.
Rewrite the error checking code, sharing most of the code between
INTEGER and BIT STRING. Make sure that we test for both duplicated
names and number, as well as for negative bit numbers for
BIT STRING.
This rewrite will eliminate two dialyzer warnings for unmatched
returns.
|
|
A named number list as used for ENUMERATED and INTEGER can never
have an {identifier,...} tuple in its third position like this:
{'NamedNumber',Id,{identifier,_,_}}
because asn1ct_parser2:parse_NamedNumber/1 will always replace
an identifier tuple with an #Externaluereference{} record.
|
|
Since most calls to asn1_error/3 throw its result, it makes more
sense to let asn1_error/3 itself throw the error tuple. Add the
return_asn1_error/3 to return the error tuple to use when we don't
want to throw it.
|
|
The loader of native code tries to avoid race condition by bringing
down the system to a single scheduler. Unfortunately, that will not
completely avoid race conditions beacuse other processes may still
run while the code is being loaded. Therefore, we must still make
sure that native code has been fully fixed up before it can be
executed.
Under unlucky circumstances, it was possible for the global name
register process to call a fun in native code before the native
code for the fun had been fully fixed up. The run-time system
would crash when running the not-fully-fixed-up code.
Here is a way to make the bug 100% reproducible. First add this
function to the 'global' module:
silly_looper(List) ->
lists:foreach(fun(E) -> put(any_atom, E) end, List),
silly_looper(List).
Then insert the following code at the beginning of the init/1
function in the 'global' module:
spawn_link(fun() -> silly_looper(lists:seq(1, 100)) end),
The run-time system will crash during start up when the native
code for the 'global' module is being loaded. What will happen
is that lists:foreach/2 (which runs in native code) will call
the native code for the fun in silly_looper/1 before the reference
to 'any_atom' has been changed from a 0 to the proper tagged
atom value. The put/2 BIF will exit when attempting to calculate
the hash value for the illegal value 0 (it is not properly tagged).
To eliminate this race condition, we must delay patching the
native code addresses for a fun into the fun entry until the native
code has been fully fixed up. We will use the new BIFs introduced
in the previous commit.
While we are at it, we will also make sure that we erase any
temporary variables in the process dictionary used by the
hipe_unified_loader module.
|
|
This commit is a preparation for eliminating a race condition
loading the native code for modules whose BEAM code has already
been loaded. Here we introduce two new BIFs so that looking up
a fun entry is separate from setting the native address in the
fun entry.
|
|
The expression,
#{} =:= M
where M was any Map, would always result in 'true'.
This commit fixes this issue by first comparing sizes for
both terms and then checking for size zero.
|
|
* rickard/xcomp-readme:
Let xcomp/README.md refer to HOWTO/INSTALL-CROSS.md
|
|
* bjorn/erts/fp-exceptions-on-osx:
Disable accidentally enabled floating point exceptions on MacOS X
|
|
|
|
|
|
In c7ddafbe, which disabled floating point exceptions on Linux,
floating point exceptions were accidentally enabled on MacOS X.
|
|
|
|
|
|
|
|
record fields
|
|
|
|
|