aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2015-10-09Update DialyzerHans Bolinder
Record field types have been modified due to commit 8ce35b2: "Take out automatic insertion of 'undefined' from typed record fields".
2015-10-09Update CompilerHans Bolinder
A record field type has been modified due to commit 8ce35b2: "Take out automatic insertion of 'undefined' from typed record fields".
2015-10-08stdlib: Refactor the supervisor module's stateHans Bolinder
The field 'dynamics' in #state{} is a union of two opaque types, which is possibly problematic. Tagging the types should make the code safe for warnings from future versions of Dialyzer.
2015-10-08Update Kernel and STDLIBHans Bolinder
Record field types have been modified due to commit 8ce35b2: "Take out automatic insertion of 'undefined' from typed record fields".
2015-10-08Take out automatic insertion of 'undefined' from typed record fieldsKostis Sagonas
Background ----------- In record fields with a type declaration but without an initializer, the Erlang parser inserted automatically the singleton type 'undefined' to the list of declared types, if that value was not present there. I.e. the record declaration: -record(rec, {f1 :: float(), f2 = 42 :: integer(), f3 :: some_mod:some_typ()}). was translated by the parser to: -record(rec, {f1 :: float() | 'undefined', f2 = 42 :: integer(), f3 :: some_mod:some_typ() | 'undefined'}). The rationale for this was that creation of a "dummy" #rec{} record should not result in a warning from dialyzer that e.g. the implicit initialization of the #rec.f1 field violates its type declaration. Problems --------- This seemingly innocent action has some unforeseen consequences. For starters, there is no way for programmers to declare that e.g. only floats make sense for the f1 field of #rec{} records when there is no `obvious' default initializer for this field. (This also affects tools like PropEr that use these declarations produced by the Erlang parser to generate random instances of records for testing purposes.) It also means that dialyzer does not warn if e.g. an is_atom/1 test or something more exotic like an atom_to_list/1 call is performed on the value of the f1 field. Similarly, there is no way to extend dialyzer to warn if it finds record constructions where f1 is not initialized to some float. Last but not least, it is semantically problematic when the type of the field is an opaque type: creating a union of an opaque and a structured type is very problematic for analysis because it fundamentally breaks the opacity of the term at that point. Change ------- To solve these problems the parser will not automatically insert the 'undefined' value anymore; instead the user has the option to choose the places where this value makes sense (for the field) and where it does not and insert the | 'undefined' there manually. Consequences of this change ---------------------------- This change means that dialyzer will issue a warning for all places where records with uninitialized fields are created and those fields have a declared type that is incompatible with 'undefined' (e.g. float()). This warning can be suppressed easily by adding | 'undefined' to the type of this field. This also adds documentation that the user really intends to create records where this field is uninitialized.
2015-10-08Merge branch 'maint'Zandra
2015-10-08Merge branch 'tomszilagyi/shell-support-del-home-end' into maintZandra
OTP-12032 * tomszilagyi/shell-support-del-home-end: Erlang shell: Support keys Del, Home and End
2015-10-08Update primary bootstrapBjörn Gustavsson
2015-10-08Merge branch 'bjorn/compiler/fix-crash'Björn Gustavsson
* bjorn/compiler/fix-crash: beam_reorder: Eliminate compiler crash
2015-10-08Merge branch 'maint'Björn Gustavsson
* maint: Avoid always updating inet_dns in the primary bootstrap
2015-10-08Merge branch 'bjorn/kernel/inet_dns/OTP-13027' into maintBjörn Gustavsson
* bjorn/kernel/inet_dns/OTP-13027: Avoid always updating inet_dns in the primary bootstrap
2015-10-08Merge branch 'maint'Zandra
2015-10-08Merge branch 'tuncer/leex-leo-liu-result-field-order' into maintZandra
OTP-13031 * tuncer/leex-leo-liu-result-field-order: yecc: fix file/2 error tuple doc leex: fix file/2 error tuple doc (Reported-by: Leo Liu)
2015-10-07Merge branch 'maint'Hans Nilsson
2015-10-07Merge branch 'hans/ssh/zlib_openssh/OTP-12759' into maintHans Nilsson
2015-10-06Merge branch 'maint'Sverker Eriksson
2015-10-06Merge branch 'sverk/erts/doc-review' into maintSverker Eriksson
* sverk/erts/doc-review: erts: Spell-check erlang.xml erts: Review newer additions to erlang.xml erts: Review module erlang docs erts: Update module erlang docs erts: Review time correction docs erts: Update erts time correction docs
2015-10-06ssh: doc updateHans Nilsson
2015-10-06ssh: compression tests skipped if alg is not supportedHans Nilsson
2015-10-06ssh: Bug in [email protected] compression fixedHans Nilsson
2015-10-06Merge branch 'maint'Hans Nilsson
2015-10-06Merge branch 'hans/ssh/aes-ctr-modes/OTP-12939' into maintHans Nilsson
2015-10-06Merge branch 'maint'Henrik Nord
Conflicts: OTP_VERSION
2015-10-06Merge branch 'maint-18' into maintHenrik Nord
2015-10-06ssh: document ctr crypto modeHans Nilsson
2015-10-06ssh: aes192-ctr and aes256-ctr implementedHans Nilsson
2015-10-05erts: Spell-check erlang.xmlSverker Eriksson
2015-10-05Merge branch 'maint'Lukas Larsson
2015-10-05Merge branch 'lukas/erts/fix_ptab_assert/OTP-13028' into maintLukas Larsson
2015-10-05Avoid always updating inet_dns in the primary bootstrapBjörn Gustavsson
The include file inet_dns_record_adts.hrl is generated by the Perl script inet_dns_record_adts.pl in a non-deterministic way. That is, every time the script is run, the functions will be in a different order. That will cause inet_dns.beam in the primary bootstrap to be updated every time the bootstrap is updated, even though there is no actual code change. Modify the Perl script to sort the keys pulled out from hashes to make the order deterministic.
2015-10-05beam_reorder: Eliminate compiler crashBjörn Gustavsson
c288ab87 added beam_reorder to move get_tuple_element instructions. Compiling code such as the following would crash the compiler: alloc(_U1, _U2, R) -> V = R#alloc.version, Res = id(V), _ = id(0), Res. The crash would occur because the following two instructions: {get_tuple_element,{x,2},1,{x,1}}. {allocate_zero,1,2}. were swapped and rewritten to: {allocate_zero,1,1}. {get_tuple_element,{x,2},1,{x,1}}. That transformation is not safe because the allocate_zero instruction would kill {x,2}, which is the register that is holding the reference to the tuple. Only do the transformation when the tuple reference is in an x register with a lower number than the destination register.
2015-10-05Updated OTP versionOTP-18.1.1Erlang/OTP
2015-10-05Prepare releaseErlang/OTP
2015-10-05Merge branch 'dgud/mnesia/restore-leak/OTP-13025' into maint-18Erlang/OTP
* dgud/mnesia/restore-leak/OTP-13025: mnesia: Fix mnesia:restore/2 which caused a disk_log leak
2015-10-05Merge branch 'ia/inets/string-not-atom/OTP-13022' into maint-18Erlang/OTP
* ia/inets/string-not-atom/OTP-13022: inets: Use ?MODULE_STRING instead of ?MODULE as argument should be a string
2015-10-05Merge branch 'ia/inets/custom-header-add-default/OTP-13013' into maint-18Erlang/OTP
* ia/inets/custom-header-add-default/OTP-13013: inets: Prepare for release inets: Add new customize function response_default_headers inets: Add behaviour httpd_custom_api
2015-10-02Merge branch 'maint'Zandra
2015-10-02Merge branch 'essen/missing-behavior-absform' into maintZandra
* essen/missing-behavior-absform: Add missing behavior/behaviours to absform docs
2015-10-02Merge branch 'kostis/eldap-no-unmatched-returns'Zandra
* kostis/eldap-no-unmatched-returns: Eliminate dialyzer warnings for unmatched_returns
2015-10-02Merge branch 'maint'Zandra
2015-10-02Merge branch 'nybek/supervisor_reporting_error' into maintZandra
* nybek/supervisor_reporting_error: Fix supervisor reporting error
2015-10-02mnesia: Fix mnesia:restore/2 which caused a disk_log leakDan Gudmundsson
Introduced a leak of disk_log processes in the rewrite to try-catch.
2015-10-02Merge branch 'maint'Henrik Nord
2015-10-02Merge branch 'travis-ci' into maintHenrik Nord
2015-10-02Update configurationHenrik Nord
Now runs release_docs och the smoke_test Also in paralell
2015-10-02Merge branch 'maint'Hans Nilsson
* maint: ssh: 4.1->4.2
2015-10-02Merge branch 'hans/ssh/update_vsn.mk' into maintHans Nilsson
* hans/ssh/update_vsn.mk: ssh: 4.1->4.2
2015-10-02ssh: 4.1->4.2Hans Nilsson
2015-10-02Merge branch 'maint'Hans Nilsson
* maint: ssh: document dh-gex default values ssh: document ecdh and hmac-sha2-512
2015-10-02Merge branch 'hans/ssh/doc_dh-gex_defaults' into maintHans Nilsson
* hans/ssh/doc_dh-gex_defaults: ssh: document dh-gex default values