diff options
author | Björn-Egil Dahlberg <[email protected]> | 2014-02-07 11:30:13 +0100 |
---|---|---|
committer | Björn-Egil Dahlberg <[email protected]> | 2014-02-07 11:30:13 +0100 |
commit | 76181f2e146dea3638e70a8636690ab8b4397c70 (patch) | |
tree | 0db0d57e210b7aefe5b451e690117c2d625dd88a | |
parent | 60246d149deef631366bdca8605a8cf323427cc7 (diff) | |
parent | b31a985383d1d641b4d05439c9e30a2f5958dd93 (diff) | |
download | otp-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.c | 6 | ||||
-rw-r--r-- | erts/emulator/beam/ops.tab | 4 | ||||
-rw-r--r-- | lib/compiler/test/map_SUITE.erl | 1 |
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}), |