aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler
diff options
context:
space:
mode:
authorAnthony Ramine <[email protected]>2014-03-05 00:00:01 +0100
committerAnthony Ramine <[email protected]>2014-03-05 00:00:01 +0100
commit55e4051bbe8f9790e19cf403bdd736a56e512510 (patch)
treec02cbb50b39529648c634cc4b90fcea2d268e2c1 /lib/compiler
parentc199bd2923e7d733e60beb9bd27b3852cbb2e699 (diff)
downloadotp-55e4051bbe8f9790e19cf403bdd736a56e512510.tar.gz
otp-55e4051bbe8f9790e19cf403bdd736a56e512510.tar.bz2
otp-55e4051bbe8f9790e19cf403bdd736a56e512510.zip
Properly check label use in get_map_elements in beam_jump
Reported-by: Ulf Norell
Diffstat (limited to 'lib/compiler')
-rw-r--r--lib/compiler/src/beam_jump.erl1
-rw-r--r--lib/compiler/test/map_SUITE.erl6
2 files changed, 7 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index 0fc8d45c80..100acaede3 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -451,6 +451,7 @@ is_label_used_in_2({set,_,_,Info}, Lbl) ->
{put_tuple,_} -> false;
{get_tuple_element,_} -> false;
{set_tuple_element,_} -> false;
+ {get_map_elements,{f,F}} -> F =:= Lbl;
{line,_} -> false;
_ when is_atom(Info) -> false
end.
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl
index 3639192a51..427883d59b 100644
--- a/lib/compiler/test/map_SUITE.erl
+++ b/lib/compiler/test/map_SUITE.erl
@@ -293,6 +293,8 @@ t_guard_bifs(Config) when is_list(Config) ->
false = map_guard_body({}),
true = map_guard_pattern(#{a=>1, <<"hi">> => "hi" }),
false = map_guard_pattern("list"),
+ true = map_guard_tautology(),
+ true = map_guard_ill_map_size(),
ok.
map_guard_empty() when is_map(#{}); false -> true.
@@ -305,6 +307,10 @@ map_guard_body(M) -> is_map(M).
map_guard_pattern(#{}) -> true;
map_guard_pattern(_) -> false.
+map_guard_tautology() when #{} =:= #{}; true -> true.
+
+map_guard_ill_map_size() when true; map_size(0) -> true.
+
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")}),