aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/utils.c
diff options
context:
space:
mode:
authorBjörn-Egil Dahlberg <[email protected]>2014-02-27 17:50:58 +0100
committerBjörn-Egil Dahlberg <[email protected]>2014-02-27 18:39:07 +0100
commit615e41b3810cecc7a30668193ce1fb0207cc42c7 (patch)
tree681b4ee32a3a603bca9d0a04c2373f9e542f2850 /erts/emulator/beam/utils.c
parent2202a8880f5472ce4bf65afdb967c70a12f35703 (diff)
downloadotp-615e41b3810cecc7a30668193ce1fb0207cc42c7.tar.gz
otp-615e41b3810cecc7a30668193ce1fb0207cc42c7.tar.bz2
otp-615e41b3810cecc7a30668193ce1fb0207cc42c7.zip
erts: Fix Map cmp exact equal of an empty map
The expression, #{} =:= M where M was any Map, would always result in 'true'. This commit fixes this issue by first comparing sizes for both terms and then checking for size zero.
Diffstat (limited to 'erts/emulator/beam/utils.c')
-rw-r--r--erts/emulator/beam/utils.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index 5b43d25e3c..738f793020 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -2125,7 +2125,11 @@ tailrecur_ne:
if (!is_boxed(b) || *boxed_val_rel(b,b_base) != *aa)
goto not_equal;
bb = map_val_rel(b,b_base);
- if ((sz = map_get_size((map_t*)aa)) == 0) goto pop_next;
+ sz = map_get_size((map_t*)aa);
+
+ if (sz != map_get_size((map_t*)bb)) goto not_equal;
+ if (sz == 0) goto pop_next;
+
aa += 2;
bb += 2;
sz += 1; /* increment for tuple-keys */