aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-03-04 12:30:54 +0100
committerBjörn-Egil Dahlberg <[email protected]>2014-03-04 12:30:54 +0100
commit2fbbc2f0d7987d15aef7b3ece116926e1215d8a3 (patch)
treeb1a169fe219998666560abe3b65981b93a51a610
parent2e5457c71e7c125b3d603e04575648b7afa1b54a (diff)
parent5436de7707970f89ecee7ff649bc8ab6b99f8f36 (diff)
downloadotp-2fbbc2f0d7987d15aef7b3ece116926e1215d8a3.tar.gz
otp-2fbbc2f0d7987d15aef7b3ece116926e1215d8a3.tar.bz2
otp-2fbbc2f0d7987d15aef7b3ece116926e1215d8a3.zip
Merge branch 'nox/maps-fix-beam_bool-put_map'
* nox/maps-fix-beam_bool-put_map: Properly collect labels in put_map instructions in beam_bool
-rw-r--r--lib/compiler/src/beam_bool.erl2
-rw-r--r--lib/compiler/test/map_SUITE.erl3
2 files changed, 5 insertions, 0 deletions
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index 124abd13c1..590665514b 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -318,6 +318,8 @@ split_block_label_used([{set,[_],_,{bif,_,{f,Fail}}}|_], Fail) ->
true;
split_block_label_used([{set,[_],_,{alloc,_,{gc_bif,_,{f,Fail}}}}|_], Fail) ->
true;
+split_block_label_used([{set,[_],_,{alloc,_,{put_map,_,{f,Fail}}}}|_], Fail) ->
+ true;
split_block_label_used([_|Is], Fail) ->
split_block_label_used(Is, Fail);
split_block_label_used([], _) -> false.
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl
index ddcce0d37a..3639192a51 100644
--- a/lib/compiler/test/map_SUITE.erl
+++ b/lib/compiler/test/map_SUITE.erl
@@ -286,6 +286,7 @@ get_val(#{ "wazzup" := _, val := V}) -> V;
get_val(#{ val := V }) -> {some_val, V}.
t_guard_bifs(Config) when is_list(Config) ->
+ true = map_guard_empty(),
true = map_guard_head(#{a=>1}),
false = map_guard_head([]),
true = map_guard_body(#{a=>1}),
@@ -294,6 +295,8 @@ t_guard_bifs(Config) when is_list(Config) ->
false = map_guard_pattern("list"),
ok.
+map_guard_empty() when is_map(#{}); false -> true.
+
map_guard_head(M) when is_map(M) -> true;
map_guard_head(_) -> false.