aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-02-07 11:30:13 +0100
committerBjörn-Egil Dahlberg <[email protected]>2014-02-07 11:30:13 +0100
commit76181f2e146dea3638e70a8636690ab8b4397c70 (patch)
tree0db0d57e210b7aefe5b451e690117c2d625dd88a
parent60246d149deef631366bdca8605a8cf323427cc7 (diff)
parentb31a985383d1d641b4d05439c9e30a2f5958dd93 (diff)
downloadotp-76181f2e146dea3638e70a8636690ab8b4397c70.tar.gz
otp-76181f2e146dea3638e70a8636690ab8b4397c70.tar.bz2
otp-76181f2e146dea3638e70a8636690ab8b4397c70.zip
Merge branch 'egil/erts/fix-maps-beam_load'
* egil/erts/fix-maps-beam_load: compiler: Update map_SUITE with error case test erts: Maps must fail on exact updates of empty Maps erts: Fix Maps for beam_load
-rw-r--r--erts/emulator/beam/beam_emu.c6
-rw-r--r--erts/emulator/beam/ops.tab4
-rw-r--r--lib/compiler/test/map_SUITE.erl1
3 files changed, 6 insertions, 5 deletions
diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c
index 89d9442526..1ae413d46e 100644
--- a/erts/emulator/beam/beam_emu.c
+++ b/erts/emulator/beam/beam_emu.c
@@ -2355,7 +2355,7 @@ void process_main(void)
Next(4+Arg(3));
}
- OpCase(update_map_assoc_jddII): {
+ OpCase(update_map_assoc_jsdII): {
Eterm res;
Eterm map;
@@ -2373,7 +2373,7 @@ void process_main(void)
}
}
- OpCase(update_map_exact_jddII): {
+ OpCase(update_map_exact_jsdII): {
Eterm res;
Eterm map;
@@ -6614,7 +6614,7 @@ update_map_exact(Process* p, Eterm* reg, Eterm map, BeamInstr* I)
*/
if (num_old == 0) {
- return new_map(p, reg, I+1);
+ return THE_NON_VALUE;
}
/*
diff --git a/erts/emulator/beam/ops.tab b/erts/emulator/beam/ops.tab
index f35997efee..9ea3a3a8ea 100644
--- a/erts/emulator/beam/ops.tab
+++ b/erts/emulator/beam/ops.tab
@@ -1482,8 +1482,8 @@ put_map_exact F Src Dst Live Size Rest=* => \
update_map_exact F Src Dst Live Size Rest
new_map j d I I
-update_map_assoc j d d I I
-update_map_exact j d d I I
+update_map_assoc j s d I I
+update_map_exact j s d I I
is_map Fail cq => jump Fail
diff --git a/lib/compiler/test/map_SUITE.erl b/lib/compiler/test/map_SUITE.erl
index 0ba5d5dd0d..dc880a7a9d 100644
--- a/lib/compiler/test/map_SUITE.erl
+++ b/lib/compiler/test/map_SUITE.erl
@@ -215,6 +215,7 @@ t_update_exact(Config) when is_list(Config) ->
M2 = M0#{3=>wrong,3.0:=new},
%% Errors cases.
+ {'EXIT',{badarg,_}} = (catch ((id(nil))#{ a := b })),
{'EXIT',{badarg,_}} = (catch M0#{nonexisting:=val}),
{'EXIT',{badarg,_}} = (catch M0#{1.0:=v,1.0=>v2}),
{'EXIT',{badarg,_}} = (catch M0#{42.0:=v,42:=v2}),