Age | Commit message (Collapse) | Author |
|
The optimization of a 'case' statement could lead to incorrect
code that would cause an exception at run-time.
Here is an example to show how the optimization went wrong. Start
with the following code:
f({r,#{key:=Val},X}=S) ->
case S of
{r,_,_} ->
setelement(3, Val, S)
end.
(The record operations have already been translated to the
corresponding tuple operations.) The first step in case_opt/3 is
to substitute S to obtain:
f({r,#{key:=Val},X}=S) ->
case {r,#{key:=Val},X} of
{r,_,_} ->
setelement(3, Val, S)
end.
After that substitution the 'case' can be simplified to:
f({r,#{key:=Val},_}=S) ->
case #{key:=Val} of
NewVar ->
setelement(3, Val, S)
end.
That is the result from case_opt/3. Now eval_case/2 notices
that since there is only one clause left in the 'case', the
'case' can eliminated:
f({r,#{key:=Val},_}=S) ->
NewVar = #{key:=Val},
setelement(3, Val, S).
Since the map construction may have a side effect, it was not
eliminated, but assigned to a variable that is never used.
The problem is that '#{key:=Val}' is fine as a pattern, but in a
construction of a new map, the '=>' operator must be used. So the
map construction will fail, generating an exception.
As a conservative correction for a maintenance release, we will
abort the 'case' optimization if the substitution into the 'case'
expression is anything but data items (tuples, conses, or
literals) or variables.
Reported-by: Dmitry Aleksandrov
|
|
* dgud/debugger/save-state-mac/OTP-12378:
debugger: Fix debugger save options on mac
|
|
* dgud/wx/connect-when-terminating/OTP-12374:
wx: Do not crash server when going down
|
|
|
|
* mikpe/fix-eacces-spelling:
fix eacces spelling
|
|
wxFileDialog:getPaths(FD) always return the empty list
on mac when using file dialog.
|
|
* hans/eldap/bad_return_close/OTP-12349:
eldap: Remove trailing white space.
eldap: Test cases for a few return values (open, close)
eldap: updated eldap:close in tests
eldap: Makes close/1 return as documented.
|
|
* hans/eldap/test_improvents/OTP-12355:
eldap: Corrects SSL over IPv6 test.
eldap: Removes eldap_misc_SUITE that is now included in eldap_basic_SUITE.
eldap: Add encode/decode tests.
eldap: Merge eldap_connections_SUITE into eldab_basic_SUITE
eldap: Adds ssl to connections test suite
eldap: Updates basic test suite - Splits one large testcase into smaller ones. - Makes tests independent - Adds some tests.
|
|
If a connect request was made during the takedown of wx it would crash.
|
|
* haguenau/fix-endianness-speling:
Replaced "Endianess" with "Endianness" everywhere
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Splits one large testcase into smaller ones.
- Makes tests independent
- Adds some tests.
|
|
If a channel is closed by the peer while using a function with call semantics
in ssh_connection.erl return {error, closed}. Document that the functions
can return {error, timeout | closed} and not only ssh_request_status()
|
|
* marcus/revert-ssh-testcase2/OTP-12004:
fix failed conflict resolution
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* dgud/debugger/still-invoked-gs-functions/OTP-12357:
debugger: Do not use the old removed gs functionality
|
|
|
|
|
|
* rickard/appup-files/OTP-12358:
Add .appup file
|
|
|
|
* rickard/autoconf/OTP-12348:
Update megaco.appup.src
|
|
|
|
dbg_ui_trace module was invoked even though the module had been removed.
|
|
This reverts commit d086394ebd3595d431835af80709977a6c1c7c89.
|
|
* rickard/autoconf/OTP-12348:
Distribute autoconf helpers
|
|
* raimo/netns-opt-gen_udp/OTP-12314:
Text netns option at socket open
Fix handling netns option in gen_udp
|
|
|
|
Distribute aclocal.m4, install-sh, config.guess, and config.sub
to applications at build time instead of having multiple identical
copies committed in the repository.
|
|
|
|
|
|
|
|
* egil/fix-dialyzer-map-key-coalescing/OTP-12347:
dialyzer: Test recoalesced map keys
compiler: Coalesce map keys in dialyzer mode
|
|
* anders/diameter/17.4_release/OTP-12343:
vsn -> 1.8
Update appup for 17.4
|
|
* siri/ct_netconfc/subsystem-timeout/OTP-12334:
[ct_netconfc] Handle timeout failure in ssh
|
|
* siri/ct_telnet/unstable-tests/OTP-12329:
[ct_telnet] Fix test case 'server_speaks'
[ct_telnet] Improve debug printouts and logging
[ct_telnet] Add timestamp to telnet_server debug printout
[ct_telnet] Extend timeout in test from 1 to 2 sek
[ct_telnet] Don't send extra newline after password
|
|
* hans/ssh/appup:
ssh: Fixes wrong version in appup file
|