aboutsummaryrefslogtreecommitdiffstats
path: root/lib/compiler/src/sys_core_fold.erl
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2015-02-05 09:34:10 +0100
committerBjörn Gustavsson <[email protected]>2015-02-05 09:34:10 +0100
commitcb44555c44725afea836ed7b255c8bd45d8eec58 (patch)
tree24164e8557f9d62578bfe94be98fc084f17e6470 /lib/compiler/src/sys_core_fold.erl
parent42d6afe554e11813385dbf175fce58f995c2f9e5 (diff)
parentf79afb23fbd469bed88616784f757707f9985a06 (diff)
downloadotp-cb44555c44725afea836ed7b255c8bd45d8eec58.tar.gz
otp-cb44555c44725afea836ed7b255c8bd45d8eec58.tar.bz2
otp-cb44555c44725afea836ed7b255c8bd45d8eec58.zip
Merge branch 'bjorn/compiler/maps-comparison/OTP-12456' into maint
* bjorn/compiler/maps-comparison/OTP-12456: Correct unsafe optimization of '==' and '/='
Diffstat (limited to 'lib/compiler/src/sys_core_fold.erl')
-rw-r--r--lib/compiler/src/sys_core_fold.erl5
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index f4f5c3f361..ed8f609082 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -1229,6 +1229,11 @@ is_non_numeric([H|T]) ->
is_non_numeric(H) andalso is_non_numeric(T);
is_non_numeric(Tuple) when is_tuple(Tuple) ->
is_non_numeric_tuple(Tuple, tuple_size(Tuple));
+is_non_numeric(Map) when is_map(Map) ->
+ %% Note that 17.x and 18.x compare keys in different ways.
+ %% Be very conservative -- require that both keys and values
+ %% are non-numeric.
+ is_non_numeric(maps:to_list(Map));
is_non_numeric(Num) when is_number(Num) ->
false;
is_non_numeric(_) -> true.