File 3147-stdlib-Fix-map-comprehension-result-when-a-key-value.patch of Package erlang
From 56ead490923abe0ea79f680a54b664a3ad80b3e3 Mon Sep 17 00:00:00 2001
From: lucioleKi <isabell@erlang.org>
Date: Wed, 29 Jan 2025 11:54:58 +0100
Subject: [PATCH] stdlib: Fix map comprehension result when a key value is
replaced
Fix https://github.com/erlang/otp/issues/9348
---
lib/stdlib/src/erl_eval.erl | 2 +-
lib/stdlib/test/erl_eval_SUITE.erl | 7 ++++++-
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/lib/stdlib/src/erl_eval.erl b/lib/stdlib/src/erl_eval.erl
index e752dc3484..53544164ab 100644
--- a/lib/stdlib/src/erl_eval.erl
+++ b/lib/stdlib/src/erl_eval.erl
@@ -1257,7 +1257,7 @@ eval_bc1(E, [], Bs, Lf, Ef, FUVs, Acc) ->
eval_mc(E, Qs, Bs, Lf, Ef, RBs, FUVs) ->
L = eval_mc1(E, Qs, Bs, Lf, Ef, FUVs, []),
- Map = maps:from_list(L),
+ Map = maps:from_list(reverse(L)),
ret_expr(Map, Bs, RBs).
eval_mc1(E, [Q|Qs], Bs0, Lf, Ef, FUVs, Acc0) ->
diff --git a/lib/stdlib/test/erl_eval_SUITE.erl b/lib/stdlib/test/erl_eval_SUITE.erl
index 674204ff7c..33187c765d 100644
--- a/lib/stdlib/test/erl_eval_SUITE.erl
+++ b/lib/stdlib/test/erl_eval_SUITE.erl
@@ -2211,7 +2211,12 @@ eep58(Config) when is_list(Config) ->
check(fun() -> [X || X := X <- #{a => 1, b => b}] end,
"[X || X := X <- #{a => 1, b => b}].",
[b]),
-
+ check(fun() -> #{A => B || {A, B} <- [{1, 2}, {1, 3}]} end,
+ "#{A => B || {A, B} <- [{1, 2}, {1, 3}]}.",
+ #{1 => 3}),
+ check(fun() -> #{A => B || X <- [1, 5], {A, B} <- [{X, X+1}, {X, X+3}]} end,
+ "#{A => B || X <- [1, 5], {A, B} <- [{X, X+1}, {X, X+3}]}.",
+ #{1 => 4,5 => 8}),
error_check("[K+V || K := V <- a].", {bad_generator,a}),
error_check("[K+V || K := V <- [-1|#{}]].", {bad_generator,[-1|#{}]}),
--
2.43.0