aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2018-08-20 15:44:05 +0200
committerBjörn Gustavsson <[email protected]>2018-08-22 10:35:39 +0200
commit924f1573adb661f5f15123b0e7af80bb233418be (patch)
tree934a5bd6ba1c5c40d87c956b990035ec971436fd
parent00401985f1c9227b6e94309ae5526c2ebf341527 (diff)
downloadotp-924f1573adb661f5f15123b0e7af80bb233418be.tar.gz
otp-924f1573adb661f5f15123b0e7af80bb233418be.tar.bz2
otp-924f1573adb661f5f15123b0e7af80bb233418be.zip
map_SUITE: Cover map_get optimizations in beam_dead
-rw-r--r--lib/compiler/test/map_SUITE.erl59
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")}),