diff options
author | Björn Gustavsson <[email protected]> | 2018-08-20 15:44:05 +0200 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2018-08-22 10:35:39 +0200 |
commit | 924f1573adb661f5f15123b0e7af80bb233418be (patch) | |
tree | 934a5bd6ba1c5c40d87c956b990035ec971436fd /lib/compiler/test | |
parent | 00401985f1c9227b6e94309ae5526c2ebf341527 (diff) | |
download | otp-924f1573adb661f5f15123b0e7af80bb233418be.tar.gz otp-924f1573adb661f5f15123b0e7af80bb233418be.tar.bz2 otp-924f1573adb661f5f15123b0e7af80bb233418be.zip |
map_SUITE: Cover map_get optimizations in beam_dead
Diffstat (limited to 'lib/compiler/test')
-rw-r--r-- | lib/compiler/test/map_SUITE.erl | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl index c004dca834..f1b09869f2 100644 --- a/lib/compiler/test/map_SUITE.erl +++ b/lib/compiler/test/map_SUITE.erl @@ -1258,6 +1258,31 @@ t_guard_bifs(Config) when is_list(Config) -> {'EXIT',{{badkey,k},_}} = (catch erl_699(#{})), {'EXIT',{{badmap,not_a_map},_}} = (catch erl_699(not_a_map)), + %% Cover optimizations in beam_dead. + + ok = beam_dead_1(#{a=>any,k=>true}), + error = beam_dead_1(#{a=>any,k=>false}), + error = beam_dead_1(#{a=>any}), + error = beam_dead_1(#{}), + + ok = beam_dead_2(#{a=>any,k=>true}), + error = beam_dead_2(#{a=>any,k=>false}), + error = beam_dead_2(#{a=>any}), + error = beam_dead_2(#{}), + + ok = beam_dead_3(#{k=>true}), + error = beam_dead_3(#{k=>false}), + error = beam_dead_3(#{}), + + ok = beam_dead_4(#{k=>true}), + error = beam_dead_4(#{k=>false}), + error = beam_dead_4(#{}), + error = beam_dead_4(not_a_map), + + ok = beam_dead_5(#{k=>true}), + error = beam_dead_5(#{k=>false}), + error = beam_dead_3(#{}), + ok. map_guard_empty() when is_map(#{}); false -> true. @@ -1298,6 +1323,40 @@ erl_699(M) -> %% Used to cause an internal consistency failure. {is_map_key(k, M),maps:get(k, M)}. +beam_dead_1(#{a:=_,k:=_}=M) when map_get(k, M) -> + ok; +beam_dead_1(#{}) -> + error. + +beam_dead_2(M) -> + case M of + #{a:=_,k:=_} when map_get(k, M) -> + ok; + #{} -> + error + end. + +beam_dead_3(M) -> + case M of + #{k:=_} when map_get(k, M) -> + ok; + #{} -> + error + end. + +beam_dead_4(M) -> + case M of + #{} when map_get(k, M) -> + ok; + _ -> + error + end. + +beam_dead_5(#{}=M) when map_get(k, M) -> + ok; +beam_dead_5(#{}) -> + error. + t_guard_sequence(Config) when is_list(Config) -> {1, "a"} = map_guard_sequence_1(#{seq=>1,val=>id("a")}), {2, "b"} = map_guard_sequence_1(#{seq=>2,val=>id("b")}), |