aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2019-02-28Update primary bootstrapJohn Högberg
2019-02-28ssl: Fix type spec for handshake_history()Péter Dimitrov
handshake_history() was specified as {[binary()], [binary[]]}, although its real type was {iodata(), iodata()}, dialyzer did not give a warning until a new function matched out an element of handshake_history and used it as input data for crypto:hash/2. Change-Id: I60660e7296a52bf69bd7198a4cffee8338907726
2019-02-28Merge branch 'maint'Hans Nilsson
* maint: crypto: Fix bad return value for aes_cfb8 and aes_cfb128 if FIPS_SUPPORT crypto: Fix bad return code for eddsa if FIPS_SUPPORT
2019-02-28Merge branch 'hans/crypto/bad_ret_fips/master/OTP-15634'Hans Nilsson
* hans/crypto/bad_ret_fips/master/OTP-15634: crypto: Fix FIPS mode
2019-02-28Merge branch 'hans/crypto/bad_ret_fips/OTP-15634' into maintHans Nilsson
* hans/crypto/bad_ret_fips/OTP-15634: crypto: Fix bad return value for aes_cfb8 and aes_cfb128 if FIPS_SUPPORT crypto: Fix bad return code for eddsa if FIPS_SUPPORT
2019-02-28Merge branch 'bjorn/cuddle-with-tests'Björn Gustavsson
* bjorn/cuddle-with-tests: Fix failing test case binary_module_SUITE:copy/1 Fix failing test case qlc_SUITE:lookup2/1
2019-02-28Remove rarely used swap instructionsBjörn Gustavsson
`swap x y` is rarely or never used. I found a single use of `swap_temp x y x` in the sample of modules compiled by `scripts/diffable`.
2019-02-28Tune move instructionsBjörn Gustavsson
Of the `move_dup` instructions, only `move_dup x x x` was frequently used. Remove the other register combinations. With those instruction `move_dup` instructions removed, it is necessary to add new predicates to avoid unsafe translation to `move_shift` and `move2_par`. Also add additional transformations to transform more `move` instructions into `move2_par`. The existing transformation would require the `move` instructions to be in the "right" order in order to be transformed. Remove `move3 x y x y x y` because it turns out to be rarely executed.
2019-02-28beam_ssa_opt: Use is_tagged_tuple moreBjörn Gustavsson
Consider this code: foo(X) -> case X of {ok,A} -> A; error -> X end. The `is_tagged_tuple` instruction would not be used because not all instructions in the tuple matching sequence had the same failure label: function t:foo(_0) { 0: @ssa_bool:7 = bif:is_tuple _0 br @ssa_bool:7, label 8, label 4 8: @ssa_arity = bif:tuple_size _0 @ssa_bool:9 = bif:'=:=' @ssa_arity, literal 2 br @ssa_bool:9, label 6, label 3 6: _4 = get_tuple_element _0, literal 0 @ssa_bool = bif:'=:=' _4, literal ok br @ssa_bool, label 5, label 3 5: _3 = get_tuple_element _0, literal 1 ret _3 4: @ssa_bool:11 = bif:'=:=' _0, literal error br @ssa_bool:11, label 10, label 3 10: ret _0 3: _2 = put_tuple literal case_clause, _0 %% t.erl:5 @ssa_ret:12 = call remote (literal erlang):(literal error)/1, _2 ret @ssa_ret:12 } Enhance the ssa_opt_record optimization to use `is_tagged_tuple` even if all failure labels are not the same: function t:foo(_0) { 0: @ssa_bool:7 = bif:is_tuple _0 br @ssa_bool:7, label 8, label 4 8: @ssa_bool:9 = is_tagged_tuple _0, literal 2, literal ok br @ssa_bool:9, label 6, label 3 6: _3 = get_tuple_element _0, literal 1 ret _3 4: @ssa_bool:11 = bif:'=:=' _0, literal error br @ssa_bool:11, label 10, label 3 10: ret _0 3: _2 = put_tuple literal case_clause, _0 %% t.erl:5 @ssa_ret:12 = call remote (literal erlang):(literal error)/1, _2 ret @ssa_ret:12 } The tuple test will be repeated, but since four instructions are replaced by two instructions, the code will still be faster and smaller.
2019-02-28beam_ssa_opt: Order consecutive get_tuple_element instructionsBjörn Gustavsson
2019-02-28erts: Fix erl_printf on SolarisJohn Högberg
flockfile(3c) and friends are hidden behind the __EXTENSIONS__ feature macro.
2019-02-28erts: Stop using madvise(2) on SolarisJohn Högberg
inet_drv adds some arcane #defines to get SCTP working, which may end up disabling madvise(2) locally in that file, breaking the build in the process. This commit disables madvise(2) altogether on Solaris as it's far simpler than undoing the define dance in erl_mmap.h.
2019-02-28Merge branch 'john/compiler/refactor-validator-type-management'John Högberg
* john/compiler/refactor-validator-type-management: beam_validator: Clarify a comment beam_validator: Make call argument validation stricter beam_validator: Don't explode when building terms in receive beam_validator: Improve 'binary' type tracking beam_validator: Infer tuple element types beam_validator: Tolerate the 'receive' hack in prim_eval beam_validator: Track types by value rather than by register beam_validator: Disregard 'none' on join beam_validator: Handle is_number, and join(float,int) -> number beam_validator: Treat is_nil as is_eq_exact with nil beam_validator: Simplify get_element_type beam_validator: Fix literal handling in meet/2 beam_validator: Use literals as keys in container (tuple) elements beam_validator: Refactor try/catch handling, again beam_validator: Refactor register initialization beam_validator: Refactor stack allocation beam_validator: Handle argument/return types for more functions beam_validator: Don't forget last element when using put_tuple beam_jump: Fail label of select_val is unsafe for move elimination cerl_sets: Use maps:filter/2 in filter/2
2019-02-27beam_validator: Clarify a commentJohn Högberg
2019-02-27crypto: Fix FIPS modeHans Nilsson
There were some bad values returned if FIPS mode was enabled. The exclusion of algorithms were not completly correct either.
2019-02-27Merge branch 'maint'Hans Nilsson
* maint: crypto: Remove assertion crypto: Fail if FIPS mode is present but can't be enabled crypto: Remove blowfish_SUITE. crypto: Update crypto_SUITE checking of FIPS
2019-02-27Merge branch 'hans/crypto/cuddle_tests' into maintHans Nilsson
* hans/crypto/cuddle_tests: crypto: Remove assertion crypto: Fail if FIPS mode is present but can't be enabled crypto: Remove blowfish_SUITE. crypto: Update crypto_SUITE checking of FIPS
2019-02-27crypto: Remove assertionHans Nilsson
This is not needed any more
2019-02-27crypto: Fail if FIPS mode is present but can't be enabledHans Nilsson
2019-02-27crypto: Remove blowfish_SUITE.Hans Nilsson
The tests are a subset of the newer and larger crypto_SUITE.
2019-02-27crypto: Update crypto_SUITE checking of FIPSHans Nilsson
The testing for not supported were missing in some cases
2019-02-27beam_validator: Make call argument validation stricterJohn Högberg
We used to cheat by checking if it were possible to meet the Given and Required types, which caught the most common problems but potentially let tuple element conflicts pass through. This was a compromise to let the thing "work" while we were refactoring the validator, but we can be a lot stricter now that its type tracking capabilities approach those of the type optimization pass.
2019-02-27beam_validator: Don't explode when building terms in receiveJohn Högberg
Building terms with fragile contents is okay because the GC is disabled during loop_rec, and the resulting term won't be reachable from the root set afterwards. ERL-862
2019-02-27beam_validator: Improve 'binary' type trackingJohn Högberg
2019-02-27beam_validator: Infer tuple element typesJohn Högberg
This is possible now that we track types on a per-value basis, and no longer need to care whether the source tuple's register has been clobbered by the time we infer the type.
2019-02-27beam_validator: Tolerate the 'receive' hack in prim_evalJohn Högberg
2019-02-27beam_validator: Track types by value rather than by registerJohn Högberg
This is a rather subtle but important distinction. While tracking types on a per-register basis is fairly effective, it forces us to track which registers alias each other, and makes it tricky to infer types over large blocks of code as instruction arguments may have been clobbered between definition and inference. Tracking types on a per-value basis makes us immune to these problems.
2019-02-27Merge branch 'maint'Hans Bolinder
* maint: edoc: Print a helpful message if reading source file fails
2019-02-27Merge branch 'hasse/edoc/helpful_message/OTP-15605/ERL-841' into maintHans Bolinder
* hasse/edoc/helpful_message/OTP-15605/ERL-841: edoc: Print a helpful message if reading source file fails
2019-02-27Fix failing test case binary_module_SUITE:copy/1Björn Gustavsson
The stronger compiler optimizations made the test case fail.
2019-02-27Fix failing test case qlc_SUITE:lookup2/1Björn Gustavsson
5239eb0c62a9 removed some optimizations in `sys_core_fold`, and because of that two warnings are no longer emitted.
2019-02-27Revert "Updated OTP version"Rickard Green
This reverts commit 5c7787077e24b0da74cce248a91fcdb7e0d7bb3f.
2019-02-27Clarify in the docs that (NEW_)FLOAT_EXT must be finiteBenedikt Reinartz
2019-02-27Revert "Prepare release"Rickard Green
This reverts commit df130102cdeca8d35fec95a0c926fd1cfec54eab.
2019-02-27Updated OTP_VERSION for Release Candidate 1OTP-22.0-rc1Rickard Green
2019-02-27beam_validator: Disregard 'none' on joinJohn Högberg
2019-02-27beam_validator: Handle is_number, and join(float,int) -> numberJohn Högberg
I have no idea how this escaped us for so long...
2019-02-27beam_validator: Treat is_nil as is_eq_exact with nilJohn Högberg
2019-02-27beam_validator: Simplify get_element_typeJohn Högberg
2019-02-27beam_validator: Fix literal handling in meet/2John Högberg
2019-02-27beam_validator: Use literals as keys in container (tuple) elementsJohn Högberg
2019-02-27beam_validator: Refactor try/catch handling, againJohn Högberg
2019-02-27beam_validator: Refactor register initializationJohn Högberg
2019-02-27beam_validator: Refactor stack allocationJohn Högberg
2019-02-26beam_validator: Handle argument/return types for more functionsJohn Högberg
2019-02-26beam_validator: Don't forget last element when using put_tupleJohn Högberg
2019-02-26erts: Remove 7-bit ASCII limitation in to_erlSverker Eriksson
Symptom: to_erl garbles anything beyond 7-bit ASCII received on STDIN Solution: Remove setting of ISTRIP flag on input terminal. "man tcsetattr" says: ISTRIP Strip off eighth bit.
2019-02-26beam_jump: Fail label of select_val is unsafe for move eliminationJohn Högberg
Consider the following code: bme(Int) -> TagInt = Int band 2#111, Tag = case TagInt of 0 -> a; 1 -> b; 2 -> c; 3 -> d; 4 -> e; 5 -> f; 6 -> g; 7 -> h end, case Tag of g -> expects_g(TagInt, Tag); h -> expects_h(TagInt, Tag); _ -> Tag = id(Tag), ok end. expects_g(6, Atom) -> Atom = id(g), ok. expects_h(7, Atom) -> Atom = id(h), ok. The type optimization pass would recognize that TagInt can only be [0 .. 7], so the first 'case' would select_val over [0 .. 6] and swap out the fail label with the block for 7. A later optimization would merge this block with 'expects_h' in the second case, as the latter is only reachable from the former. ... but this broke down when the move elimination optimization didn't take the fail label of the first select_val into account. This caused it believe that the only way to reach 'expects_h' was through the second case when 'Tag' =:= 'h', which made it remove the move instruction added in the first case, passing garbage to expects_h/2.
2019-02-26erl_docgen: Prettify c-function argument listsSverker Eriksson
with line breaks before each argument. Q: Why the 'APPLY' hack to "title_link"? A: I found no way to make a <br> survive when passed through <xsl:with-param>.
2019-02-26crypto: Fix bad return value for aes_cfb8 and aes_cfb128 if FIPS_SUPPORTHans Nilsson