diff options
author | Björn Gustavsson <[email protected]> | 2016-05-18 06:21:34 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2016-05-20 10:07:17 +0200 |
commit | 0f222d55ce46358aa7891ea482655937daaf8b52 (patch) | |
tree | 45bca0d751d744e4c5ec71f2a4ca3574bf7064a3 /lib/compiler/test | |
parent | 6515f262cba9325bef84ce90758f2e74ebfb8c9e (diff) | |
download | otp-0f222d55ce46358aa7891ea482655937daaf8b52.tar.gz otp-0f222d55ce46358aa7891ea482655937daaf8b52.tar.bz2 otp-0f222d55ce46358aa7891ea482655937daaf8b52.zip |
beam_type: Correct handling of setelement/3
We must be careful how we treat the type info for the result of:
setelement(Index, Tuple, NewValue)
If Tuple had type information, the result of setelement/3 (in x(0))
would be assigned the same type information. But that is not safe
for:
setelement(1, Tuple, NewValue)
since the type for the first element will be changed.
Therefore, we must take care to remove the type information for
the first element of the tuple if might have been modified by
setelement/3.
Diffstat (limited to 'lib/compiler/test')
-rw-r--r-- | lib/compiler/test/beam_type_SUITE.erl | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/compiler/test/beam_type_SUITE.erl b/lib/compiler/test/beam_type_SUITE.erl index 8d5c0190ed..063a27ad8d 100644 --- a/lib/compiler/test/beam_type_SUITE.erl +++ b/lib/compiler/test/beam_type_SUITE.erl @@ -21,7 +21,7 @@ -export([all/0,suite/0,groups/0,init_per_suite/1,end_per_suite/1, init_per_group/2,end_per_group/2, - integers/1,coverage/1,booleans/1]). + integers/1,coverage/1,booleans/1,setelement/1]). suite() -> [{ct_hooks,[ts_install_cth]}]. @@ -33,7 +33,8 @@ groups() -> [{p,[parallel], [integers, coverage, - booleans + booleans, + setelement ]}]. init_per_suite(Config) -> @@ -94,5 +95,11 @@ do_booleans(B) -> no -> no end. +setelement(_Config) -> + T0 = id({a,42}), + {a,_} = T0, + {b,_} = setelement(1, T0, b), + ok. + id(I) -> I. |