aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/test
diff options
context:
space:
mode:
authorJohn Högberg <[email protected]>2018-07-12 21:55:00 +0200
committerJohn Högberg <[email protected]>2018-07-13 09:57:51 +0200
commit32d674c58ba0cfddb2d5e2e83a8bf3b9a70cce4d (patch)
tree7ce0cdd94a53b611f3e038893c0cad43490b5331 /erts/emulator/test
parent1f55b15c5e3f6ff79c855963876c501e9f782406 (diff)
downloadotp-32d674c58ba0cfddb2d5e2e83a8bf3b9a70cce4d.tar.gz
otp-32d674c58ba0cfddb2d5e2e83a8bf3b9a70cce4d.tar.bz2
otp-32d674c58ba0cfddb2d5e2e83a8bf3b9a70cce4d.zip
Fix a rare crash when matching on literal maps
When matching on a literal map, the map is placed into the general scratch register first. This is fine in isolation, but when the key to be matched was in a Y register it would also be placed in the scratch register, overwriting the map and crashing the emulator.
Diffstat (limited to 'erts/emulator/test')
-rw-r--r--erts/emulator/test/map_SUITE.erl11
1 files changed, 11 insertions, 0 deletions
diff --git a/erts/emulator/test/map_SUITE.erl b/erts/emulator/test/map_SUITE.erl
index f93c637650..d0a6763fe5 100644
--- a/erts/emulator/test/map_SUITE.erl
+++ b/erts/emulator/test/map_SUITE.erl
@@ -3080,8 +3080,19 @@ y_regs(Config) when is_list(Config) ->
true = is_map(Map2) andalso is_map(Map4),
+ gurka = y_regs_literal(0),
+ gaffel = y_regs_literal(1),
+
ok.
+y_regs_literal(Key) when is_integer(Key) ->
+ %% Forces the key to be placed in a Y register.
+ lists:seq(1, 2),
+ case is_map_key(Key, #{ 0 => 0 }) of
+ true -> gurka;
+ false -> gaffel
+ end.
+
y_regs_update(Map0, Val0) ->
Val1 = {t,Val0},
K1 = id({key,1}),