Age | Commit message (Collapse) | Author |
|
|
|
In order to avoid an ummatched return warning in erts and make the code
more sane, the return value of the bif was changed from [] to 'ok'.
(Probably more hipe_bifs need such changes but they will have to wait.)
While at it, the code of various functions in hipe_unified_loader was
shortened by using lists:foreach/1 instead of explicit recursion.
|
|
* fredrik/jinterface/versions-R16B:
Bumped version number
|
|
|
|
* vd/tuple_constructor_bug/OTP-10819:
fix bug in OtpErlangTuple constructor
|
|
* hb/stdlib/unicode_corrections/OTP-10820:
[stdlib] Fix a bug concerning pretty printing and Unicode
Make Unicode corrections
|
|
Binaries were pretty printed too often.
|
|
|
|
|
|
* bjorn/remove-tuple-funs/OTP-10170:
erl_eval: Don't allow evaluation of {M,F} in the shell
|
|
* bjorn/compiler/beam_utils-crash/OTP-10825:
Fix unsafe optimization of funs
|
|
* vd/code_get_mode/OTP-10823:
Added name prefix to code.xml
Add a new function code:get_mode() can be used to detect how the code servers behaves
|
|
|
|
* hb/stdlib/erl_scan_unicode/OTP-10756:
[stdlib] Remove the undocumented 'unicode' option from the scanner
|
|
Tuples funs were removed in de7e01c958ff7c9e6da4034a53567a30a4ae5792,
but it was still possible to evaluate tuple funs in the shell.
|
|
|
|
* bjorn/compiler/crash/OTP-10794:
BEAM loader: Handle element(Pos, not_a_tuple)
|
|
Commits 53bd4974a101 and 726f6e4c7afe simplified the handling of
match_fail (used to generated exceptions such as 'function_clause')
by first rewriting them to a call to erlang/error{1,2} and later
rewriting them to specialized BEAM instructions (to reduce the
code size).
There was one flaw, though, which only was exposed when more
aggressive optimizations were added in c3b60f86c622. Here is an
example to explain it:
t(V) ->
fun(get) -> V end.
The following BEAM code will be initially generated for the fun:
{function, '-t/1-fun-0-', 2, 5}.
{label,1}.
{line,[{location,"t.erl",5}]}.
{func_info,{atom,t},{atom,'-t/1-fun-0-'},2}.
{label,2}.
{test,is_eq_exact,{f,2},[{x,0},{atom,get}]}.
{move,{x,1},{x,0}}.
return.
{label,2}.
{test_heap,2,1}.
{put_list,{x,0},nil,{x,1}}.
{move,{atom,function_clause},{x,0}}.
{line,[{location,"t.erl",5}]}.
{call_ext_only,2,{extfunc,erlang,error,2}}.
Translating back to Erlang code, that would be roughly:
'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, _) -> erlang:error(function_clause, [Arg1]).
Note that the second argument (the free variable V) is not included
in the call to erlang:error/2.
The beam_except pass will simplify the code to:
{function, '-t/1-fun-0-', 2, 8}.
{label,1}.
{line,[{location,"t.erl",5}]}.
{func_info,{atom,t},{atom,'-t/1-fun-0-'},2}.
{label,2}.
{test,is_eq_exact,{f,1},[{x,0},{atom,get}]}.
{move,{x,1},{x,0}}.
return.
The code has been shortened by jumping to the func_info/3 instruction.
Translating back to Erlang:
'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, Arg2) -> erlang:error(function_clause, [Arg1,Arg2]).
it is clear that both arguments are now included in the
'function_clause' exception, even though the initially generated
code only included the first argument.
That is no problem in this particular case, but for some more complex
funs, optimizing the first version based on variable usage could make
the second version unsafe.
I rejected the following potential solutions:
- Including the free arguments in the call to erlang:error/2:
'-t/1-fun-0-'(get, V) -> V;
'-t/1-fun-0-'(Arg1, Arg2) -> erlang:error(function_clause, [Arg1,Arg2]).
Unfortunately, that is tricky. The free variables are only known
after the second pass in v3_kernel when variable usage has been
calculated. We would need to add a third pass (only for funs) that
would the free arguments to the second argument for erlang:error/2
*and* update the variable usage information.
- Calling beam_except earlier, from within beam_block before any
optimizations based on variable usages are done. But means that the
problem could reappear in some other form in the future when other
updates are done to the code generator and/or optimization passes.
The solution I have chosen is to modify beam_except to only replace
a call to erlang:error(function_class, Args) if the length of Args
is the same as the arity in the func_info/3 instruction. The code
will be slightly larger. Also, the free variables for funs and list
comprehensions will no longer be included in the function_clause
exception (that could be less confusing, but it also means less
information during debugging).
|
|
* anders/diameter/cover/OTP-10804:
Update diameter.cover
|
|
* sverk/packet-http-string-maxlen:
erts: Increase length of well formed header names from {packet,http}
OTP-10824
|
|
* sverk/erl_interface-enum-typedef:
erl_interface: Change enum erlang_char_encoding to a typedef
|
|
* sverk/r16/erl_interface-fixup:
erl_interface: Fix ei_skip_term
|
|
|
|
|
|
|
|
* hb/stdlib/bug_fixes/OTP-10622:
[stdlib] Fix a bug that could cause the Erlang shell to loop
[stdlib] Fix bugs in eval_bits
|
|
* fredrik/odbc/update-vsn:
Bumped version number
|
|
|
|
* kp/odbc-empty-params/OTP-10798:
Add testcases for odbc:param_query
Fix odbc:param_query/3 and odbc:param_query/4.
|
|
|
|
Unicode related.
|
|
to make the API independent of the actual type of erlang_char_encoding
|
|
* siri/ts-and-tp-in-test-logs/OTP-10780:
[test_server] Add error printouts in case writing to test case html log fails
[test_server] Don't write unicode strings to latin1 log files
|
|
* bmk/snmp/snmp4222_integration/r15:
[snmp/compiler] Improved debug printouts
[snmp/compiler] Add test case and test mib
[snmp/compiler] Proper release nodes
[snmp/compiler] Add the mib (ALARM-MIB)
[snmp/compiler] MIB compiler did not handle forward index ref
[snmp/compiler] Added test case for BITS import
[snmp/compiler] Release notes, appup and proper version
[snmp/compiler] Corrected test mibs
[snmp/compiler] MIB compiler did not handle import BITS
|
|
* siri/sasl/appup-R16/OTP-10806:
Update sasl.appup.src with R16 release and remove R13 versions
|
|
* maint:
Prepare release
Don't run testX420/1 on old slow Sparc systems
testX420: Pass Options to the ASN.1 compiler
asn1_erl_nif: Correct broken length encoding
asn1_SUITE: Mend broken test_modified_x420/1
Revert "Prepare release"
Conflicts:
lib/asn1/doc/src/notes.xml
lib/asn1/test/asn1_SUITE.erl
|
|
* maint-r15:
Prepare release
Don't run testX420/1 on old slow Sparc systems
testX420: Pass Options to the ASN.1 compiler
asn1_erl_nif: Correct broken length encoding
asn1_SUITE: Mend broken test_modified_x420/1
Fix a bug for multiple extension addition groups
|
|
Errors are printed to unexpected_io log.
|
|
The loader failed to load non-optimized BEAM code generated from:
element(2, not_a_tuple)
Commit ece4c17d2288a3161c995 introduced such code into
core_fold_SUITE, leading to core_fold_no_opt_SUITE and
core_fold_post_opt_SUITE failing to load.
|
|
|
|
* bjorn/compiler/dialyzer-warnings:
compile: Eliminate warnings for unmatched return values
beam_receive: Eliminate dialyzer warning for unmatched return
beam_validator: Eliminate dialyzer warnings for unmatched returns
|
|
|
|
* bjorn/stdlib/erl_lint-coverage:
Test calling deprecated or removed functions
Test deprecating list_to_atom/1 to cover more code
Cover binary syntax errors and warnings
Remove unused error message {bittype_mismatch,_,_,_}
Remove unused error message for importing an auto-imported BIF
Remove the error message for future reserved keyword
Test a few more kinds of illegal guard expressions
Remove error handling for calling a BIF that is not auto-imported
Provoke basic semantic errors to improve test coverage
|
|
* nox/fix-seq-opt/OTP-10818:
Add two tests for unused multiple values in effect context
Forbid multiple values in Core Erlang sequence arguments
|
|
* mh/duplicate_name_error_message/OTP-10797:
Slightly nicer error message when node start fails due to duplicate name
|
|
* fredrik/tools/version_bumps:
Bumped version number
|
|
|
|
To ease matching of unrecognized header field names we convert them
from case insensitive to the format Sec-Websocket-Version
with capital letters only first and after hyphens.
Earlier only header names up to 20 characters were converted to this
format due to internal buffer limitation. Raising this limit to 50
is a pragmatic solution for existing long header names such as
Sec-Websocket-Version, while valid header names longer than 50 characters
are not very probable.
|
|
|
|
|